From a03f2dba78b0c2a4fccfc29c92e3f8485b1e196d Mon Sep 17 00:00:00 2001 From: Joren Date: Sat, 31 May 2025 00:27:58 +0200 Subject: [PATCH] hi --- assets/images/blog/blog-7.jpg | Bin 0 -> 6476 bytes assets/images/blog/blog-8.jpg | Bin 0 -> 168034 bytes assets/images/blog/blog-9.jpg | Bin 0 -> 75718 bytes content/_index.md | 2 +- content/blog/post-10.md | 124 + content/blog/post-5.md | 64 + content/blog/post-6.md | 136 + content/blog/post-7.md | 90 + content/blog/post-8.md | 79 + content/blog/post-9.md | 53 + content/project/project-3.md | 179 + hugo_stats.json | 6 + public/blog/index.html | 75 +- public/blog/index.xml | 4 +- public/blog/post-10/index.html | 9480 ++++++++ public/blog/post-5/index.html | 9386 ++++++++ public/blog/post-6/index.html | 9511 ++++++++ public/blog/post-7/index.html | 9384 ++++++++ public/blog/post-8/index.html | 9389 ++++++++ public/blog/post-9/index.html | 9587 ++++++++ .../index.xml" | 11 + .../index.xml" | 11 + public/categories/alpine-linux/index.html | 9378 ++++++++ public/categories/alpine-linux/index.xml | 19 + public/categories/communication/index.html | 9370 ++++++++ public/categories/communication/index.xml | 19 + public/categories/ctf/index.html | 32 +- public/categories/ctf/index.xml | 10 +- public/categories/cybersecurity/index.html | 157 + public/categories/cybersecurity/index.xml | 2 +- public/categories/decentralization/index.html | 9360 ++++++++ public/categories/decentralization/index.xml | 19 + public/categories/defense/index.html | 32 +- public/categories/defense/index.xml | 10 +- public/categories/dns/index.html | 9378 ++++++++ public/categories/dns/index.xml | 19 + public/categories/education/index.html | 32 +- public/categories/education/index.xml | 10 +- public/categories/event/index.html | 36 +- public/categories/event/index.xml | 16 +- public/categories/hardware/index.html | 9370 ++++++++ public/categories/hardware/index.xml | 19 + public/categories/index.html | 2 +- public/categories/index.xml | 138 +- public/categories/interview/index.html | 32 +- public/categories/interview/index.xml | 10 +- public/categories/iot/index.html | 9454 ++++++++ public/categories/iot/index.xml | 26 + public/categories/jdm/index.html | 9370 ++++++++ public/categories/jdm/index.xml | 19 + public/categories/network/index.html | 9370 ++++++++ public/categories/network/index.xml | 19 + public/categories/networking/index.html | 9462 ++++++++ public/categories/networking/index.xml | 26 + public/categories/offensive/index.html | 9527 ++++++++ public/categories/offensive/index.xml | 26 + public/categories/podcast/index.html | 32 +- public/categories/podcast/index.xml | 10 +- .../categories/reverse-engineering/index.html | 9370 ++++++++ .../categories/reverse-engineering/index.xml | 19 + public/categories/seiko/index.html | 9370 ++++++++ public/categories/seiko/index.xml | 19 + public/categories/self-hosting/index.html | 9378 ++++++++ public/categories/self-hosting/index.xml | 19 + public/categories/vpn/index.html | 9378 ++++++++ public/categories/vpn/index.xml | 19 + public/categories/watches/index.html | 9370 ++++++++ public/categories/watches/index.xml | 19 + public/categories/windows/index.html | 9370 ++++++++ public/categories/windows/index.xml | 19 + ...04d8222a33b5fd6b0c9aacafef33456be01ed2.css | 18567 ++++++++++++++++ public/images/blog/blog-5.jpg | Bin 0 -> 473169 bytes .../blog/blog-5_hu_1fa9c9461e8a5b22.webp | Bin 0 -> 12276 bytes .../blog/blog-5_hu_2496163d8ca0be9a.jpg | Bin 0 -> 33768 bytes .../blog/blog-5_hu_3f20fe629de38114.webp | Bin 0 -> 15576 bytes .../blog/blog-5_hu_4618aa5e6342cf5b.webp | Bin 0 -> 30364 bytes .../blog/blog-5_hu_54124c601931f717.webp | Bin 0 -> 23388 bytes .../blog/blog-5_hu_84904f4853785c5f.webp | Bin 0 -> 17144 bytes .../blog/blog-5_hu_cc034401e2f1274e.jpg | Bin 0 -> 42928 bytes .../blog/blog-5_hu_e31b752cd8166a9a.webp | Bin 0 -> 19296 bytes .../blog/blog-5_hu_e4f7343564430a7c.webp | Bin 0 -> 20242 bytes .../blog/blog-5_hu_f181e5573eb2a3e0.jpg | Bin 0 -> 63888 bytes public/images/blog/blog-6.jpg | Bin 0 -> 112805 bytes .../blog/blog-6_hu_49f98f56b956af12.webp | Bin 0 -> 27916 bytes .../blog/blog-6_hu_4ef932f257939b99.jpg | Bin 0 -> 47856 bytes .../blog/blog-6_hu_6e570c8b5b77b366.webp | Bin 0 -> 20468 bytes .../blog/blog-6_hu_738eea9b9eff29e3.webp | Bin 0 -> 23210 bytes .../blog/blog-6_hu_a7e61da859c97057.webp | Bin 0 -> 46124 bytes .../blog/blog-6_hu_ad7d9ec3689102a3.webp | Bin 0 -> 15286 bytes .../blog/blog-6_hu_b448f44c73a1e092.webp | Bin 0 -> 17956 bytes .../blog/blog-6_hu_c559f46af58d7b01.jpg | Bin 0 -> 36516 bytes .../blog/blog-6_hu_e56d383386eb66f4.jpg | Bin 0 -> 82540 bytes .../blog/blog-6_hu_f695abdc0daeefc5.webp | Bin 0 -> 25840 bytes public/images/blog/blog-7.jpg | Bin 0 -> 6476 bytes .../blog/blog-7_hu_32818c24ea07902c.webp | Bin 0 -> 6548 bytes .../blog/blog-7_hu_35062733e5b10c39.webp | Bin 0 -> 6858 bytes .../blog/blog-7_hu_3c4ad455eb02f8ec.jpg | Bin 0 -> 34888 bytes .../blog/blog-7_hu_a100653844898565.jpg | Bin 0 -> 18649 bytes .../blog/blog-7_hu_cc5c86d0bdb969fb.webp | Bin 0 -> 5978 bytes .../blog/blog-7_hu_e1c9231db481941.webp | Bin 0 -> 7162 bytes .../blog/blog-7_hu_fe6a5eccb44e6265.webp | Bin 0 -> 10414 bytes public/images/blog/blog-8.jpg | Bin 0 -> 168034 bytes .../blog/blog-8_hu_40fa8739755bb615.webp | Bin 0 -> 31308 bytes .../blog/blog-8_hu_877dea591168f6c9.webp | Bin 0 -> 16712 bytes .../blog/blog-8_hu_8926a4b5230a89f0.webp | Bin 0 -> 13746 bytes .../blog/blog-8_hu_8aae514cbdf57851.webp | Bin 0 -> 29892 bytes .../blog/blog-8_hu_a605adb3511bef5f.webp | Bin 0 -> 14836 bytes .../blog/blog-8_hu_aad970f07ba40e8a.jpg | Bin 0 -> 44448 bytes .../blog/blog-8_hu_bc03a607701d5da7.webp | Bin 0 -> 12256 bytes .../blog/blog-8_hu_c5615396480723ed.jpg | Bin 0 -> 15232 bytes .../blog/blog-8_hu_d73c30ce77a83a1a.webp | Bin 0 -> 11698 bytes .../blog/blog-8_hu_de52e2b1d1fcdc3e.webp | Bin 0 -> 15960 bytes .../blog/blog-8_hu_e22a20688925a560.webp | Bin 0 -> 13208 bytes .../blog/blog-8_hu_f7b5a18e65e50561.jpg | Bin 0 -> 35916 bytes public/images/blog/blog-9.jpg | Bin 0 -> 75718 bytes .../blog/blog-9_hu_14af2878d62e6e4e.webp | Bin 0 -> 46014 bytes .../blog/blog-9_hu_18953a22f9755bfc.webp | Bin 0 -> 41646 bytes .../blog/blog-9_hu_25ae63d53027b3fe.jpg | Bin 0 -> 139372 bytes .../blog/blog-9_hu_26100c6d555ed19e.webp | Bin 0 -> 37692 bytes .../blog/blog-9_hu_37b697b4c00fe908.webp | Bin 0 -> 33428 bytes .../blog/blog-9_hu_bae9a262462e5d36.webp | Bin 0 -> 76004 bytes .../blog/blog-9_hu_e62b76c2afdef019.jpg | Bin 0 -> 65309 bytes public/images/project/project-3.jpg | Bin 0 -> 158428 bytes .../project/project-3_hu_180054984159acb.webp | Bin 0 -> 25586 bytes .../project-3_hu_40eec1330ef232bd.webp | Bin 0 -> 9970 bytes .../project-3_hu_62a13caff8a630c2.webp | Bin 0 -> 28286 bytes .../project/project-3_hu_64d37c2e369de612.jpg | Bin 0 -> 40297 bytes .../project-3_hu_6ffef74af2881d50.webp | Bin 0 -> 9102 bytes .../project/project-3_hu_74a5edf51d9d285d.jpg | Bin 0 -> 21819 bytes .../project-3_hu_9535a5ff19541788.webp | Bin 0 -> 17176 bytes .../project/project-3_hu_9a71e7d65d0c4faf.jpg | Bin 0 -> 47264 bytes .../project/project-3_hu_9d6702f14e8f2c3b.jpg | Bin 0 -> 92544 bytes .../project-3_hu_a2e987e158776bbc.webp | Bin 0 -> 19392 bytes .../project-3_hu_a68548c55de36b1f.webp | Bin 0 -> 21832 bytes .../project-3_hu_b90c24b136494fce.webp | Bin 0 -> 8214 bytes .../project-3_hu_cdba049d937c2697.webp | Bin 0 -> 10986 bytes .../project-3_hu_e67ec575b7f17bcf.webp | Bin 0 -> 53098 bytes public/index.html | 77 +- public/index.json | 2 +- public/index.xml | 4 +- public/project/index.html | 30 +- public/project/index.xml | 20 +- public/project/project-3/index.html | 9444 ++++++++ public/sitemap.xml | 106 +- public/tags/index.html | 2 +- public/tags/index.xml | 4 +- .../blog/blog-5_hu_2496163d8ca0be9a.jpg | Bin 0 -> 33768 bytes .../blog/blog-5_hu_3b13dd258d8e8ef1.webp | Bin 0 -> 82 bytes .../blog/blog-5_hu_3f20fe629de38114.webp | Bin 0 -> 15576 bytes .../blog/blog-5_hu_4618aa5e6342cf5b.webp | Bin 0 -> 30364 bytes .../blog/blog-5_hu_84904f4853785c5f.webp | Bin 0 -> 17144 bytes .../blog/blog-5_hu_c9dc7523d07b861b.jpg | Bin 0 -> 660 bytes .../blog/blog-5_hu_cb27be9aee0182b2.webp | Bin 0 -> 138 bytes .../blog/blog-5_hu_e31b752cd8166a9a.webp | Bin 0 -> 19296 bytes .../blog/blog-5_hu_e4f7343564430a7c.webp | Bin 0 -> 20242 bytes .../blog/blog-5_hu_f181e5573eb2a3e0.jpg | Bin 0 -> 63888 bytes .../blog/blog-5_hu_ff0855e8e831ff82.jpg | Bin 0 -> 680 bytes .../blog/blog-6_hu_49f98f56b956af12.webp | Bin 0 -> 27916 bytes .../blog/blog-6_hu_4ef932f257939b99.jpg | Bin 0 -> 47856 bytes .../blog/blog-6_hu_62011c29e1daca2a.webp | Bin 0 -> 346 bytes .../blog/blog-6_hu_6e570c8b5b77b366.webp | Bin 0 -> 20468 bytes .../blog/blog-6_hu_738eea9b9eff29e3.webp | Bin 0 -> 23210 bytes .../blog/blog-6_hu_7bbe789ce9360bd3.jpg | Bin 0 -> 666 bytes .../blog/blog-6_hu_893ea71c11c7bac.webp | Bin 0 -> 352 bytes .../blog/blog-6_hu_94d9d17f4b15c54f.webp | Bin 0 -> 96 bytes .../blog/blog-6_hu_95ad04c7ad134a20.jpg | Bin 0 -> 666 bytes .../blog/blog-6_hu_9ccf72e728cddc4f.webp | Bin 0 -> 136 bytes .../blog/blog-6_hu_a7e61da859c97057.webp | Bin 0 -> 46124 bytes .../blog/blog-6_hu_ad567519d31722cc.webp | Bin 0 -> 138 bytes .../blog/blog-6_hu_ad7d9ec3689102a3.webp | Bin 0 -> 15286 bytes .../blog/blog-6_hu_b448f44c73a1e092.webp | Bin 0 -> 17956 bytes .../blog/blog-6_hu_c559f46af58d7b01.jpg | Bin 0 -> 36516 bytes .../blog/blog-6_hu_d23672e5db64057a.webp | Bin 0 -> 120 bytes .../blog/blog-6_hu_e56d383386eb66f4.jpg | Bin 0 -> 82540 bytes .../blog/blog-6_hu_f695abdc0daeefc5.webp | Bin 0 -> 25840 bytes .../blog/blog-7_hu_1a7d4db8515e34fb.webp | Bin 0 -> 204 bytes .../blog/blog-7_hu_28ba032f81e9e9a4.webp | Bin 0 -> 118 bytes .../blog/blog-7_hu_32818c24ea07902c.webp | Bin 0 -> 6548 bytes .../blog/blog-7_hu_35062733e5b10c39.webp | Bin 0 -> 6858 bytes .../blog/blog-7_hu_3c4ad455eb02f8ec.jpg | Bin 0 -> 34888 bytes .../blog/blog-7_hu_6d24320dedf899a6.jpg | Bin 0 -> 749 bytes .../blog/blog-7_hu_a100653844898565.jpg | Bin 0 -> 18649 bytes .../blog/blog-7_hu_a2c70a4e452a49a4.jpg | Bin 0 -> 750 bytes .../blog/blog-7_hu_cc5c86d0bdb969fb.webp | Bin 0 -> 5978 bytes .../blog/blog-7_hu_e1c9231db481941.webp | Bin 0 -> 7162 bytes .../blog/blog-7_hu_fe6a5eccb44e6265.webp | Bin 0 -> 10414 bytes .../blog/blog-8_hu_1dc451b77bce59cd.jpg | Bin 0 -> 679 bytes .../blog/blog-8_hu_40fa8739755bb615.webp | Bin 0 -> 31308 bytes .../blog/blog-8_hu_745808788662d8ae.jpg | Bin 0 -> 727 bytes .../blog/blog-8_hu_824a82d1a09783e3.jpg | Bin 0 -> 751 bytes .../blog/blog-8_hu_877dea591168f6c9.webp | Bin 0 -> 16712 bytes .../blog/blog-8_hu_8926a4b5230a89f0.webp | Bin 0 -> 13746 bytes .../blog/blog-8_hu_8aae514cbdf57851.webp | Bin 0 -> 29892 bytes .../blog/blog-8_hu_a329e2b26f6a8908.jpg | Bin 0 -> 693 bytes .../blog/blog-8_hu_a605adb3511bef5f.webp | Bin 0 -> 14836 bytes .../blog/blog-8_hu_a8ed6ca87b320542.webp | Bin 0 -> 578 bytes .../blog/blog-8_hu_aad970f07ba40e8a.jpg | Bin 0 -> 44448 bytes .../blog/blog-8_hu_bc03a607701d5da7.webp | Bin 0 -> 12256 bytes .../blog/blog-8_hu_c5615396480723ed.jpg | Bin 0 -> 15232 bytes .../blog/blog-8_hu_d73c30ce77a83a1a.webp | Bin 0 -> 11698 bytes .../blog/blog-8_hu_de52e2b1d1fcdc3e.webp | Bin 0 -> 15960 bytes .../blog/blog-8_hu_e22a20688925a560.webp | Bin 0 -> 13208 bytes .../blog/blog-8_hu_f7b5a18e65e50561.jpg | Bin 0 -> 35916 bytes .../blog/blog-8_hu_fb9d8494515bab6e.webp | Bin 0 -> 562 bytes .../blog/blog-9_hu_14af2878d62e6e4e.webp | Bin 0 -> 46014 bytes .../blog/blog-9_hu_18953a22f9755bfc.webp | Bin 0 -> 41646 bytes .../blog/blog-9_hu_25ae63d53027b3fe.jpg | Bin 0 -> 139372 bytes .../blog/blog-9_hu_26100c6d555ed19e.webp | Bin 0 -> 37692 bytes .../blog/blog-9_hu_37b697b4c00fe908.webp | Bin 0 -> 33428 bytes .../blog/blog-9_hu_63ff821cf963806d.webp | Bin 0 -> 184 bytes .../blog/blog-9_hu_8c09f6f21bbc597d.jpg | Bin 0 -> 854 bytes .../blog/blog-9_hu_97d67ed8f9fea622.webp | Bin 0 -> 388 bytes .../blog/blog-9_hu_bae9a262462e5d36.webp | Bin 0 -> 76004 bytes .../blog/blog-9_hu_e62b76c2afdef019.jpg | Bin 0 -> 65309 bytes .../blog/blog-9_hu_fbb56cc7010cbdda.jpg | Bin 0 -> 787 bytes .../project/project-3_hu_17acc8520d14cbfd.jpg | Bin 0 -> 665 bytes .../project/project-3_hu_180054984159acb.webp | Bin 0 -> 25586 bytes .../project-3_hu_27fb6f1fec031f75.webp | Bin 0 -> 88 bytes .../project-3_hu_62a13caff8a630c2.webp | Bin 0 -> 28286 bytes .../project/project-3_hu_64d37c2e369de612.jpg | Bin 0 -> 40297 bytes .../project/project-3_hu_9d6702f14e8f2c3b.jpg | Bin 0 -> 92544 bytes .../project-3_hu_a2e987e158776bbc.webp | Bin 0 -> 19392 bytes .../project-3_hu_a343ed18dc44546f.webp | Bin 0 -> 156 bytes .../project-3_hu_a68548c55de36b1f.webp | Bin 0 -> 21832 bytes .../project/project-3_hu_b861b80acfd7710c.jpg | Bin 0 -> 683 bytes .../project-3_hu_e67ec575b7f17bcf.webp | Bin 0 -> 53098 bytes 226 files changed, 236810 insertions(+), 178 deletions(-) create mode 100644 assets/images/blog/blog-7.jpg create mode 100644 assets/images/blog/blog-8.jpg create mode 100644 assets/images/blog/blog-9.jpg create mode 100644 content/blog/post-10.md create mode 100644 content/blog/post-5.md create mode 100644 content/blog/post-6.md create mode 100644 content/blog/post-7.md create mode 100644 content/blog/post-8.md create mode 100644 content/blog/post-9.md create mode 100644 content/project/project-3.md create mode 100644 public/blog/post-10/index.html create mode 100644 public/blog/post-5/index.html create mode 100644 public/blog/post-6/index.html create mode 100644 public/blog/post-7/index.html create mode 100644 public/blog/post-8/index.html create mode 100644 public/blog/post-9/index.html create mode 100644 "public/categories/\\cybersecurity-offensive-windows/index.xml" create mode 100644 "public/categories/\\self-hosting-networking-alpine-linux-vpn-dns/index.xml" create mode 100644 public/categories/alpine-linux/index.html create mode 100644 public/categories/alpine-linux/index.xml create mode 100644 public/categories/communication/index.html create mode 100644 public/categories/communication/index.xml create mode 100644 public/categories/decentralization/index.html create mode 100644 public/categories/decentralization/index.xml create mode 100644 public/categories/dns/index.html create mode 100644 public/categories/dns/index.xml create mode 100644 public/categories/hardware/index.html create mode 100644 public/categories/hardware/index.xml create mode 100644 public/categories/iot/index.html create mode 100644 public/categories/iot/index.xml create mode 100644 public/categories/jdm/index.html create mode 100644 public/categories/jdm/index.xml create mode 100644 public/categories/network/index.html create mode 100644 public/categories/network/index.xml create mode 100644 public/categories/networking/index.html create mode 100644 public/categories/networking/index.xml create mode 100644 public/categories/offensive/index.html create mode 100644 public/categories/offensive/index.xml create mode 100644 public/categories/reverse-engineering/index.html create mode 100644 public/categories/reverse-engineering/index.xml create mode 100644 public/categories/seiko/index.html create mode 100644 public/categories/seiko/index.xml create mode 100644 public/categories/self-hosting/index.html create mode 100644 public/categories/self-hosting/index.xml create mode 100644 public/categories/vpn/index.html create mode 100644 public/categories/vpn/index.xml create mode 100644 public/categories/watches/index.html create mode 100644 public/categories/watches/index.xml create mode 100644 public/categories/windows/index.html create mode 100644 public/categories/windows/index.xml create mode 100644 public/css/style.af64285d60a6cb7cb62ddf607404d8222a33b5fd6b0c9aacafef33456be01ed2.css create mode 100644 public/images/blog/blog-5.jpg create mode 100644 public/images/blog/blog-5_hu_1fa9c9461e8a5b22.webp create mode 100644 public/images/blog/blog-5_hu_2496163d8ca0be9a.jpg create mode 100644 public/images/blog/blog-5_hu_3f20fe629de38114.webp create mode 100644 public/images/blog/blog-5_hu_4618aa5e6342cf5b.webp create mode 100644 public/images/blog/blog-5_hu_54124c601931f717.webp create mode 100644 public/images/blog/blog-5_hu_84904f4853785c5f.webp create mode 100644 public/images/blog/blog-5_hu_cc034401e2f1274e.jpg create mode 100644 public/images/blog/blog-5_hu_e31b752cd8166a9a.webp create mode 100644 public/images/blog/blog-5_hu_e4f7343564430a7c.webp create mode 100644 public/images/blog/blog-5_hu_f181e5573eb2a3e0.jpg create mode 100644 public/images/blog/blog-6.jpg create mode 100644 public/images/blog/blog-6_hu_49f98f56b956af12.webp create mode 100644 public/images/blog/blog-6_hu_4ef932f257939b99.jpg create mode 100644 public/images/blog/blog-6_hu_6e570c8b5b77b366.webp create mode 100644 public/images/blog/blog-6_hu_738eea9b9eff29e3.webp create mode 100644 public/images/blog/blog-6_hu_a7e61da859c97057.webp create mode 100644 public/images/blog/blog-6_hu_ad7d9ec3689102a3.webp create mode 100644 public/images/blog/blog-6_hu_b448f44c73a1e092.webp create mode 100644 public/images/blog/blog-6_hu_c559f46af58d7b01.jpg create mode 100644 public/images/blog/blog-6_hu_e56d383386eb66f4.jpg create mode 100644 public/images/blog/blog-6_hu_f695abdc0daeefc5.webp create mode 100644 public/images/blog/blog-7.jpg create mode 100644 public/images/blog/blog-7_hu_32818c24ea07902c.webp create mode 100644 public/images/blog/blog-7_hu_35062733e5b10c39.webp create mode 100644 public/images/blog/blog-7_hu_3c4ad455eb02f8ec.jpg create mode 100644 public/images/blog/blog-7_hu_a100653844898565.jpg create mode 100644 public/images/blog/blog-7_hu_cc5c86d0bdb969fb.webp create mode 100644 public/images/blog/blog-7_hu_e1c9231db481941.webp create mode 100644 public/images/blog/blog-7_hu_fe6a5eccb44e6265.webp create mode 100644 public/images/blog/blog-8.jpg create mode 100644 public/images/blog/blog-8_hu_40fa8739755bb615.webp create mode 100644 public/images/blog/blog-8_hu_877dea591168f6c9.webp create mode 100644 public/images/blog/blog-8_hu_8926a4b5230a89f0.webp create mode 100644 public/images/blog/blog-8_hu_8aae514cbdf57851.webp create mode 100644 public/images/blog/blog-8_hu_a605adb3511bef5f.webp create mode 100644 public/images/blog/blog-8_hu_aad970f07ba40e8a.jpg create mode 100644 public/images/blog/blog-8_hu_bc03a607701d5da7.webp create mode 100644 public/images/blog/blog-8_hu_c5615396480723ed.jpg create mode 100644 public/images/blog/blog-8_hu_d73c30ce77a83a1a.webp create mode 100644 public/images/blog/blog-8_hu_de52e2b1d1fcdc3e.webp create mode 100644 public/images/blog/blog-8_hu_e22a20688925a560.webp create mode 100644 public/images/blog/blog-8_hu_f7b5a18e65e50561.jpg create mode 100644 public/images/blog/blog-9.jpg create mode 100644 public/images/blog/blog-9_hu_14af2878d62e6e4e.webp create mode 100644 public/images/blog/blog-9_hu_18953a22f9755bfc.webp create mode 100644 public/images/blog/blog-9_hu_25ae63d53027b3fe.jpg create mode 100644 public/images/blog/blog-9_hu_26100c6d555ed19e.webp create mode 100644 public/images/blog/blog-9_hu_37b697b4c00fe908.webp create mode 100644 public/images/blog/blog-9_hu_bae9a262462e5d36.webp create mode 100644 public/images/blog/blog-9_hu_e62b76c2afdef019.jpg create mode 100644 public/images/project/project-3.jpg create mode 100644 public/images/project/project-3_hu_180054984159acb.webp create mode 100644 public/images/project/project-3_hu_40eec1330ef232bd.webp create mode 100644 public/images/project/project-3_hu_62a13caff8a630c2.webp create mode 100644 public/images/project/project-3_hu_64d37c2e369de612.jpg create mode 100644 public/images/project/project-3_hu_6ffef74af2881d50.webp create mode 100644 public/images/project/project-3_hu_74a5edf51d9d285d.jpg create mode 100644 public/images/project/project-3_hu_9535a5ff19541788.webp create mode 100644 public/images/project/project-3_hu_9a71e7d65d0c4faf.jpg create mode 100644 public/images/project/project-3_hu_9d6702f14e8f2c3b.jpg create mode 100644 public/images/project/project-3_hu_a2e987e158776bbc.webp create mode 100644 public/images/project/project-3_hu_a68548c55de36b1f.webp create mode 100644 public/images/project/project-3_hu_b90c24b136494fce.webp create mode 100644 public/images/project/project-3_hu_cdba049d937c2697.webp create mode 100644 public/images/project/project-3_hu_e67ec575b7f17bcf.webp create mode 100644 public/project/project-3/index.html create mode 100644 resources/_gen/images/images/blog/blog-5_hu_2496163d8ca0be9a.jpg create mode 100644 resources/_gen/images/images/blog/blog-5_hu_3b13dd258d8e8ef1.webp create mode 100644 resources/_gen/images/images/blog/blog-5_hu_3f20fe629de38114.webp create mode 100644 resources/_gen/images/images/blog/blog-5_hu_4618aa5e6342cf5b.webp create mode 100644 resources/_gen/images/images/blog/blog-5_hu_84904f4853785c5f.webp create mode 100644 resources/_gen/images/images/blog/blog-5_hu_c9dc7523d07b861b.jpg create mode 100644 resources/_gen/images/images/blog/blog-5_hu_cb27be9aee0182b2.webp create mode 100644 resources/_gen/images/images/blog/blog-5_hu_e31b752cd8166a9a.webp create mode 100644 resources/_gen/images/images/blog/blog-5_hu_e4f7343564430a7c.webp create mode 100644 resources/_gen/images/images/blog/blog-5_hu_f181e5573eb2a3e0.jpg create mode 100644 resources/_gen/images/images/blog/blog-5_hu_ff0855e8e831ff82.jpg create mode 100644 resources/_gen/images/images/blog/blog-6_hu_49f98f56b956af12.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_4ef932f257939b99.jpg create mode 100644 resources/_gen/images/images/blog/blog-6_hu_62011c29e1daca2a.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_6e570c8b5b77b366.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_738eea9b9eff29e3.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_7bbe789ce9360bd3.jpg create mode 100644 resources/_gen/images/images/blog/blog-6_hu_893ea71c11c7bac.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_94d9d17f4b15c54f.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_95ad04c7ad134a20.jpg create mode 100644 resources/_gen/images/images/blog/blog-6_hu_9ccf72e728cddc4f.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_a7e61da859c97057.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_ad567519d31722cc.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_ad7d9ec3689102a3.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_b448f44c73a1e092.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_c559f46af58d7b01.jpg create mode 100644 resources/_gen/images/images/blog/blog-6_hu_d23672e5db64057a.webp create mode 100644 resources/_gen/images/images/blog/blog-6_hu_e56d383386eb66f4.jpg create mode 100644 resources/_gen/images/images/blog/blog-6_hu_f695abdc0daeefc5.webp create mode 100644 resources/_gen/images/images/blog/blog-7_hu_1a7d4db8515e34fb.webp create mode 100644 resources/_gen/images/images/blog/blog-7_hu_28ba032f81e9e9a4.webp create mode 100644 resources/_gen/images/images/blog/blog-7_hu_32818c24ea07902c.webp create mode 100644 resources/_gen/images/images/blog/blog-7_hu_35062733e5b10c39.webp create mode 100644 resources/_gen/images/images/blog/blog-7_hu_3c4ad455eb02f8ec.jpg create mode 100644 resources/_gen/images/images/blog/blog-7_hu_6d24320dedf899a6.jpg create mode 100644 resources/_gen/images/images/blog/blog-7_hu_a100653844898565.jpg create mode 100644 resources/_gen/images/images/blog/blog-7_hu_a2c70a4e452a49a4.jpg create mode 100644 resources/_gen/images/images/blog/blog-7_hu_cc5c86d0bdb969fb.webp create mode 100644 resources/_gen/images/images/blog/blog-7_hu_e1c9231db481941.webp create mode 100644 resources/_gen/images/images/blog/blog-7_hu_fe6a5eccb44e6265.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_1dc451b77bce59cd.jpg create mode 100644 resources/_gen/images/images/blog/blog-8_hu_40fa8739755bb615.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_745808788662d8ae.jpg create mode 100644 resources/_gen/images/images/blog/blog-8_hu_824a82d1a09783e3.jpg create mode 100644 resources/_gen/images/images/blog/blog-8_hu_877dea591168f6c9.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_8926a4b5230a89f0.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_8aae514cbdf57851.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_a329e2b26f6a8908.jpg create mode 100644 resources/_gen/images/images/blog/blog-8_hu_a605adb3511bef5f.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_a8ed6ca87b320542.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_aad970f07ba40e8a.jpg create mode 100644 resources/_gen/images/images/blog/blog-8_hu_bc03a607701d5da7.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_c5615396480723ed.jpg create mode 100644 resources/_gen/images/images/blog/blog-8_hu_d73c30ce77a83a1a.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_de52e2b1d1fcdc3e.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_e22a20688925a560.webp create mode 100644 resources/_gen/images/images/blog/blog-8_hu_f7b5a18e65e50561.jpg create mode 100644 resources/_gen/images/images/blog/blog-8_hu_fb9d8494515bab6e.webp create mode 100644 resources/_gen/images/images/blog/blog-9_hu_14af2878d62e6e4e.webp create mode 100644 resources/_gen/images/images/blog/blog-9_hu_18953a22f9755bfc.webp create mode 100644 resources/_gen/images/images/blog/blog-9_hu_25ae63d53027b3fe.jpg create mode 100644 resources/_gen/images/images/blog/blog-9_hu_26100c6d555ed19e.webp create mode 100644 resources/_gen/images/images/blog/blog-9_hu_37b697b4c00fe908.webp create mode 100644 resources/_gen/images/images/blog/blog-9_hu_63ff821cf963806d.webp create mode 100644 resources/_gen/images/images/blog/blog-9_hu_8c09f6f21bbc597d.jpg create mode 100644 resources/_gen/images/images/blog/blog-9_hu_97d67ed8f9fea622.webp create mode 100644 resources/_gen/images/images/blog/blog-9_hu_bae9a262462e5d36.webp create mode 100644 resources/_gen/images/images/blog/blog-9_hu_e62b76c2afdef019.jpg create mode 100644 resources/_gen/images/images/blog/blog-9_hu_fbb56cc7010cbdda.jpg create mode 100644 resources/_gen/images/images/project/project-3_hu_17acc8520d14cbfd.jpg create mode 100644 resources/_gen/images/images/project/project-3_hu_180054984159acb.webp create mode 100644 resources/_gen/images/images/project/project-3_hu_27fb6f1fec031f75.webp create mode 100644 resources/_gen/images/images/project/project-3_hu_62a13caff8a630c2.webp create mode 100644 resources/_gen/images/images/project/project-3_hu_64d37c2e369de612.jpg create mode 100644 resources/_gen/images/images/project/project-3_hu_9d6702f14e8f2c3b.jpg create mode 100644 resources/_gen/images/images/project/project-3_hu_a2e987e158776bbc.webp create mode 100644 resources/_gen/images/images/project/project-3_hu_a343ed18dc44546f.webp create mode 100644 resources/_gen/images/images/project/project-3_hu_a68548c55de36b1f.webp create mode 100644 resources/_gen/images/images/project/project-3_hu_b861b80acfd7710c.jpg create mode 100644 resources/_gen/images/images/project/project-3_hu_e67ec575b7f17bcf.webp diff --git a/assets/images/blog/blog-7.jpg b/assets/images/blog/blog-7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13defa2beabb4d3f89ebeb205135875b1021d811 GIT binary patch literal 6476 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

aTqHUPgu4 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%0A6xe0dqN84N?;=QNS-X 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 literal 0 HcmV?d00001 diff --git a/content/_index.md b/content/_index.md index d3d066b..a4602aa 100644 --- a/content/_index.md +++ b/content/_index.md @@ -7,7 +7,7 @@ banner: greeting: "Hi there!" title: "I'm **Joren Schipman**" image: "images/hero-image.png" - designation: "Student Applied Computer Science - Cybersecurity" + designation: "Student Applied Computer Science" institution: "Howest University of Applied Sciences" description: > I'm Joren Schipman, a 21-year-old student with a deep passion for cybersecurity, hardware hacking, and solving complex problems through code. I thrive in collaborative environments, value curiosity, and actively pursue hands-on learning to build secure and innovative technology. diff --git a/content/blog/post-10.md b/content/blog/post-10.md new file mode 100644 index 0000000..87b9440 --- /dev/null +++ b/content/blog/post-10.md @@ -0,0 +1,124 @@ +--- + +title: "The Smart Home Trap: Isolate or Be Owned" +image: "images/blog/blog-10.jpg" +date: "2025-05-30 00:00:00 +0000 UTC" +description: "Your smart lightbulb doesn't need to talk to your NAS. Here's how and why to isolate IoT devices using VLANs, even in a small home network." +categories: ["networking", "iot", "cybersecurity"] +draft: false + +--- + + +Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you've got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget. + +--- + +### Why Segmentation Matters + +Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue. + +IoT vendors prioritize cost and features, not security. Devices often ship with: + +* Default credentials +* No software updates +* Open ports and broadcast protocols +* Aggressive telemetry to unknown hosts + +A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network? + +--- + +### VLANs 101 + +A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered. + +VLANs let you: + +* Group devices by function (IoT, work, guest) +* Apply granular rules between segments +* Limit broadcast traffic and discovery protocols +* Deny unnecessary cross-talk + +And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware. + +--- + +### Sample Home Setup + +Let’s say you have a smart home with: + +* A Nest thermostat +* A Samsung smart TV +* A couple of Tuya smart plugs +* A doorbell camera +* Your personal laptop and NAS + +**Step 1: Define VLANs** + +| VLAN ID | Purpose | Example Devices | +| ------- | ------------- | ------------------------- | +| 10 | LAN (trusted) | Laptop, NAS | +| 20 | IoT | Smart TV, plugs, doorbell | +| 30 | Guest WiFi | Friends’ phones | + +**Step 2: Assign Interfaces** + +Most routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices. + +**Step 3: Firewall Rules** + +On VLAN 20 (IoT): + +* Block → LAN (VLAN 10) +* Block → VLAN 20 (intra-IoT) +* Allow → DNS, NTP, and cloud endpoints +* Allow → Internet (443) +* Log → Any unknown destination + +Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering. + +--- + +### Real-World Examples + +**Case 1: Smart TV** + +Blocked LAN access. Within 5 minutes of boot, it tried to contact: + +* Samsung cloud +* Akamai CDN +* Google DNS +* DoubleClick +* Random advertising domains + +Video streaming still worked fine. Everything else was noise. + +**Case 2: IP Camera** + +On the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop. + +--- + +### Caveats & Limitations + +* Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. +* Chromecast-style devices need special rules if you want casting from your main network. +* VLANs require managed switches or VLAN-aware APs. +* Guest VLANs may need bandwidth limits or isolation tweaks. + +Still, the benefits far outweigh the complexity. + +--- + +### Final Thoughts + +If you’ve ever installed a smart plug and noticed it phones home every few minutes, you're not alone. And if you haven't noticed, maybe you should. + +Security in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever. + +Your lightbulb shouldn’t have access to your tax documents. + + +{{< notice tip >}}Looking for OpenWRT-compatible routers? Check the [OpenWRT Table of Hardware](https://openwrt.org/toh/start) for supported devices.{{< /notice >}} + diff --git a/content/blog/post-5.md b/content/blog/post-5.md new file mode 100644 index 0000000..cb91908 --- /dev/null +++ b/content/blog/post-5.md @@ -0,0 +1,64 @@ +--- + +title: "Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks" +image: "images/blog/blog-5.jpg" +date: "2025-05-30 00:00:00 +0000 UTC" +description: "How name resolution protocols and IPv6 misconfigurations enable credential interception and NTLM relay attacks using Responder and mitm6." +categories: ["cybersecurity", "offensive", "network"] +draft: false + +--- + +In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using `Responder` and `mitm6`. + +#### Name Resolution Chaos + +When Windows can't resolve a hostname via DNS, it falls back on legacy protocols: **LLMNR** (Link-Local Multicast Name Resolution), **NBT-NS** (NetBIOS Name Service), and increasingly **mDNS** in mixed environments. These protocols ask *anyone* nearby: “Do you know who `somehost` is?” + +An attacker on the local network can answer "yes" and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM. + +#### IPv6: Enabled by Default, Forgotten by Admins + +Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there's no DHCPv6 server, they use router advertisements to configure themselves. `mitm6` abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts. + +Once clients start resolving names through the attacker's DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes. + +#### Capturing vs. Relaying + +`Responder` captures credentials (NTLMv1/v2), which can be cracked offline with tools like `hashcat`. But it's often more powerful to **relay** them live to a legitimate service. + +Tools like `ntlmrelayx` allow relaying to: + +* **SMB**: for file access, command execution, or dumping secrets via `secretsdump.py` +* **LDAP/LDAPS**: to enumerate AD users, modify objects, or create backdoor accounts +* **HTTP/WSMAN**: to access internal web apps or trigger remote code execution + +The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t. + +#### Realistic Attack Chain + +1. **Launch mitm6** to poison IPv6 and become DNS for the subnet. +2. **Run ntlmrelayx** with appropriate targets (e.g., `--smb2support --target smb://10.0.0.5`). +3. **Wait**: a victim resolves an internal name (e.g., `fileshare`), the attacker responds. +4. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. +5. `ntlmrelayx` relays these to the actual target server. +6. If successful, the attacker gains authenticated access. + +In parallel, `Responder` can be used for LLMNR/NBT-NS-based interception in IPv4 networks. + +#### Mitigation + +This isn't new, but it's often neglected. To prevent these attacks: + +* Disable **LLMNR** and **NBT-NS** via Group Policy. +* Disable **IPv6** on clients if it's not explicitly required. +* Enforce **SMB signing** and **LDAP channel binding**. +* Segment your network to reduce the blast radius. +* Prefer **Kerberos** authentication over NTLM where possible. +* Monitor for rogue IPv6 RAs and anomalous name resolution. + +#### Final Thoughts + +If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread. + +Responder and mitm6 aren’t magic. They just reveal what’s already broken. diff --git a/content/blog/post-6.md b/content/blog/post-6.md new file mode 100644 index 0000000..f2202bb --- /dev/null +++ b/content/blog/post-6.md @@ -0,0 +1,136 @@ +--- +title: "Matrix: Building a Decentralized Communication Future" +image: "images/blog/blog-6.jpg" +date: "2025-05-30 00:00:00 +0000 UTC" +description: "An in-depth exploration of the Matrix protocol, how it decentralizes messaging, enhances privacy, integrates with existing systems, and scales for real-world use." +categories: ["cybersecurity", "communication", "decentralization"] +draft: false +--- + +If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn't trapped in walled gardens. + +In this post, we explore what Matrix is, how it works, where it's being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty. + +--- + +#### What is Matrix? + +Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is **federated**, anyone can host a homeserver, and users on different homeservers can still talk to each other. + +Matrix isn’t an app. It’s a protocol. There are many clients (like [Element](https://element.io)) and server implementations (like [Synapse](https://matrix.org/docs/projects/server/synapse/)) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation. + +Matrix supports: + +- Text messaging (1:1 and group) +- End-to-end encryption (Olm/Megolm) +- Voice and video calls (WebRTC) +- File sharing +- Threaded conversations +- Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) +- Bots, widgets, and integrations + +--- + +#### Federation and Interoperability + +The power of Matrix lies in **federation**. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk. + +Bridges extend this idea further by connecting Matrix rooms to **non-Matrix platforms**. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication. + +Supported bridge targets include: + +- Slack +- Discord +- Microsoft Teams +- IRC +- Telegram +- WhatsApp +- Signal (community bridges) + +--- + +#### Security: End-to-End Encryption by Default + +Matrix takes security seriously. Its **end-to-end encryption (E2EE)** is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default. + +Encryption features include: + +- Forward secrecy +- Device verification and cross-signing +- Secure backup with recovery keys +- Key sharing and gossiping for reliable message delivery +- Support for multiple devices per user + +In contrast to Signal, Matrix's E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers. + +--- + +#### Real-World Usage + +Matrix is not just experimental, it’s **deployed at scale**: + +- **The French government** built **Tchap**, a Matrix-based internal messaging system used by over 30 ministries. +- **German Bundeswehr and healthcare services** use Matrix to comply with national data sovereignty and security standards. +- **Mozilla**, **KDE**, **F-Droid**, and many **FOSS communities** use Matrix for open collaboration. +- **The European Commission** and **NATO-affiliated organizations** explore Matrix for secure, federated communication in cyber operations. + +--- + +#### Matrix in Cybersecurity Contexts + +In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in: + +- **Out-of-band communication** when primary networks are compromised. +- **C2 channel simulation** in adversary emulation labs. +- **Logging and transparency** during incident response (Matrix rooms retain full audit trails). +- **Bridging** internal and external teams (e.g., SOC ↔ pentest team ↔ management). +- **Security testing**: Matrix clients and bridges offer exploitable surfaces for training scenarios. + +In exercises like **Locked Shields**, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems. + +--- + +#### Running Your Own Homeserver + +Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is **Synapse**, but others like **Dendrite** (Go, lightweight) and **Conduit** (Rust, performance-focused) are gaining traction. + +**Minimum Setup**: + +- Synapse (Python-based) +- PostgreSQL backend +- Reverse proxy (NGINX) +- DNS (SRV + .well-known for federation) +- TLS via Let’s Encrypt +- Optional: SSO, LDAP, backup, TURN server for VoIP + +**Pro Tips**: + +- Use **https://element.io/pricing** for managed hosting if self-hosting is too much overhead. +- Enable **E2EE backup** to retain message history across devices. +- Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. + +--- + +#### Limitations and Workarounds + +Matrix is powerful, but not perfect: + +- Federation sync can be resource-heavy on large rooms. +- Encrypted rooms sometimes lag on low-powered clients. +- Bridges can break when third-party APIs change. +- Identity is room-based, no global handles like @user across servers. +- Message ordering across federated servers is eventually consistent, not immediate. + +Work is ongoing on **Matrix 2.0**, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling. + +--- + +#### Final Thoughts + +Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It's not just a protocol. It's a philosophy of **sovereignty, transparency, and trustless interoperability**. + +Whether you're building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations. + +{{< notice tip >}}Visit [matrix.org](https://matrix.org) to learn more, or get started today at [element.io](https://element.io).{{< /notice >}} + + diff --git a/content/blog/post-7.md b/content/blog/post-7.md new file mode 100644 index 0000000..9ea5ce4 --- /dev/null +++ b/content/blog/post-7.md @@ -0,0 +1,90 @@ +--- + +title: "Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains" +image: "images/blog/blog-7.jpg" +date: "2025-05-30 00:00:00 +0000 UTC" +description: "Kerberos is a cornerstone of enterprise authentication in Windows domains. But what happens when attackers turn its trust model against itself?" +categories: ["cybersecurity", "offensive", "windows"] +draft: false + +--- + +Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like **Kerberoasting**, **delegation abuse**, and **ticket impersonation**. + +--- + +#### How Kerberos Actually Works + +Authentication starts when a user logs in and the **Key Distribution Center (KDC)**, a service on the domain controller, issues a **TGT (Ticket Granting Ticket)** encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again. + +From a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely. + +Spoiler: they rarely are. + +--- + +#### Kerberoasting: Plaintext Passwords in Disguise + +If a service account uses a weak password, it's game over. + +Service tickets are encrypted with the *service account’s* password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline. + +```bash +Request SPN ticket → Extract ticket → Crack with hashcat +``` + +Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain. + +Default AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns. + +--- + +#### Delegation: More Trust, More Problems + +Kerberos supports **delegation**, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused. + +**Unconstrained Delegation** lets a service impersonate *any user* who authenticates to it. If an attacker compromises such a host, they can extract users’ **TGTs** and use them elsewhere, effectively becoming them. Golden ticket territory. + +**Constrained Delegation** tries to limit this to specific services. But it’s often misconfigured. And worse, **Resource-Based Constrained Delegation (RBCD)** lets target systems define who can delegate *to* them, opening up attack chains where a low-priv user adds a rogue computer object and escalates. + +These trust edges form a privilege escalation graph. BloodHound maps this beautifully. + +--- + +#### Ticket Forgery and Impersonation + +Once an attacker gets the **KRBTGT account’s** hash (e.g. via DCSync), they can create **Golden Tickets**, valid TGTs for any user, any group, any time. Total domain compromise. + +More subtle is **Silver Ticketing**. Here, the attacker forges only the **service ticket**, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement. + +Tools like `Rubeus` automate this: `asktgt`, `s4u`, `tgtdeleg`, `kerberoast`, `golden`, and `silver`. + +--- + +#### Worked Example: Kerberoasting with Rubeus + +```bash +Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local +``` + +→ Dumps service tickets in hashcat format. + +```bash +hashcat -m 13100 hashes.txt rockyou.txt +``` + +→ Cracks the SPN ticket. If the password is weak, you’re in. + +This is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring. + +--- + +#### Final Thoughts + +Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting. + +Strong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like `klist`, `event ID 4769`, and `Kerberoast detection rules` help, but only if actively used. + +In red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it. + +Want to defend the kingdom? Start by defending the keys. diff --git a/content/blog/post-8.md b/content/blog/post-8.md new file mode 100644 index 0000000..e19a76c --- /dev/null +++ b/content/blog/post-8.md @@ -0,0 +1,79 @@ +--- + +title: "Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera" +image: "images/blog/blog-8.jpg" +date: "2025-05-30 00:00:00 +0000 UTC" +description: "What happens when you mix a €22.95 PTZ camera, physical access, and bad defaults? A practical look at hardware abuse in consumer IoT." +categories: ["iot", "hardware", "reverse engineering"] +draft: false + +--- + +When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card? + +This post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter. + +--- + +#### Triggering Debug Mode with a MicroSD Card + +Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media. + +Insert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly. + +This is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless. + +--- + +#### UART Interface: Disabled Login, But Still There + +A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions. + +Combined with the SD card behavior, it paints a clear picture: **if you can touch the device, you own it**. + +--- + +#### What Could Go Wrong? + +Plenty. With root access via SD card: + +* You can replace binaries or inject backdoors. +* Extract credentials, keys, or tokens stored in the SQLite database. +* Modify the video stream, disable motion detection, or proxy footage. +* Use the device as a pivot point in a local network attack. + +All of this without triggering any alarms, logs, or user notifications. + +--- + +#### But It Encrypts Traffic? + +Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure. + +But physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments. + +--- + +#### What Can Be Done? + +Fixing this requires more than software updates. It’s about rethinking assumptions. + +* Factory debug hooks should be disabled or removed before shipment. +* Bootloaders should verify signatures, not blindly trust SD cards. +* Telnet should never be enabled automatically, ever. +* Sensitive functions should not run as root unless absolutely required. + +Until then, buyers are getting more than they bargained for. + +--- + +#### Final Thoughts + +This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card. + +If you’re building IoT gear: **assume physical access and plan for it**. +If you’re buying IoT gear: **assume nothing until you’ve torn it apart**. + +Security is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head. + +--- diff --git a/content/blog/post-9.md b/content/blog/post-9.md new file mode 100644 index 0000000..b0cdcab --- /dev/null +++ b/content/blog/post-9.md @@ -0,0 +1,53 @@ +--- + +title: "Seiko SARV001: The JDM Sleeper That Punches Above Its Weight" +image: "images/blog/blog-9.jpg" +date: "2025-05-30 00:00:00 +0000 UTC" +description: "A closer look at the Seiko SARV001, a Japanese Domestic Market gem that offers exceptional value and understated elegance." +categories: ["watches", "jdm", "seiko"] +draft: false + +--- + + +In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value. + +--- + +#### Design & Build Quality + +The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o'clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch. + +

+ + +The case is protected by Seiko's proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch's mechanical heart. + +--- + +#### Movement & Performance + +At its core, the SARV001 is powered by Seiko's in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it's not designed for diving. + +--- + +#### Wearability & Versatility + +The watch's 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings. + +--- + +#### Value Proposition + +Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank. + +--- + +#### Final Thoughts + +The Seiko SARV001 exemplifies the brand's commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection. + +--- diff --git a/content/project/project-3.md b/content/project/project-3.md new file mode 100644 index 0000000..1e9af4b --- /dev/null +++ b/content/project/project-3.md @@ -0,0 +1,179 @@ +--- + +title: "Lean and Local: DNS, VPN, IRC and Ad Blocking" +image: "/images/project/project-3.jpg" +date: "2025-05-30 00:00:00 +0000 UTC" +description: "A lightweight Alpine Linux system running DNS filtering, WireGuard VPN, and IRC on minimal hardware using a diskless setup." +categories: ["self-hosting", "networking", "alpine-linux", "vpn", "dns"] +draft: false + +--- + +Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server. + +--- + +#### Why Diskless? + +The system boots entirely from RAM using Alpine’s `diskless` mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using `lbu`, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance. + +--- + +#### Base Setup + +The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via `OpenRC` and restored from compressed overlays on boot. + +--- + +#### DNS and Ad Blocking: Blocky + +Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client. + +Highlights: + +* Local resolution for custom domains like `directme.in` +* Cloudflare, Google as upstream resolvers +* Per-IP blocking rules +* Prometheus metrics for monitoring + +Example config: + +```yaml +blocking: + denylists: + ads: + - https://big.oisd.nl/domainswild + vtm: + - /home/joren/dns/vtmgo.txt + clientGroupsBlock: + default: + - ads + 192.168.178.123: + - vtm +``` + +--- + +#### VPN: WireGuard via PiVPN + +WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI. + +Key benefits in this setup: + +* Client management is simple and scriptable. Adding, disabling, or revoking peers takes seconds: + + ```sh + pivpn -a # add client + pivpn -r # remove client + pivpn -off # temporarily disable + ``` +* Mobile-friendly. Each config can be exported as a QR code with `pivpn -qr`, which is perfect for importing into the WireGuard mobile app. +* Monitoring support. View live connections with `pivpn -c`, or audit all issued keys with `pivpn -l`. +* Backups included. One command backs up all configs: `pivpn -bk`. + +Example output: + +``` +::: Connected Clients List ::: +Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen +Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 +``` + +In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control. + +--- + +--- + +#### IRC: ngIRCd + +For real-time messaging, I run a public-facing **ngIRCd** instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, *ngIRCd* is stable, portable, and well-suited for both LAN and internet-facing deployments. + +The server is configured to: + +* Autojoin clients to a default `#General` channel +* Support cloaking for user privacy +* Restrict joins per user/IP to prevent abuse +* Provide operator access with predefined credentials +* Disable DNS and Ident lookups for speed and reduced leakage + +Here's a snapshot of the active configuration: + +```ini +[Global] +Name = irc.alpine4071 +Info = RAM-only IRC Server +Listen = 0.0.0.0 +Ports = 6667 +MotdPhrase = "Welcome to our RAM-only IRC server!" +AdminInfo1 = IRC Server +AdminInfo2 = Anywhere On Earth +AdminEMail = admin@irc.alpine4071 + +[SSL] +CertFile = /home/joren/certs/fullchain1.pem +KeyFile = /home/joren/certs/privkey1.pem +Ports = 6697, 6698 +``` + +Authentication and moderation are handled via the `[Operator]` block, and all users are dropped into a predefined channel: + +```ini +[Channel] +Name = #General +Topic = General Channel +Autojoin = yes +``` + +**Why ngIRCd?** + +* It works well on memory-constrained systems. +* It doesn’t require database backends or scripting engines. +* It supports modern essentials like TLS, cloaking, and structured limits. +* It’s simple to secure and configure, even when exposed to the open internet. + +This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage. + +You can connect today via: + +```text +irc://alpine-4071.duckdns.org:6667 (plaintext) +ircs://alpine-4071.duckdns.org:6697 (TLS) +``` + +--- + +#### Making It Stick: LBU + +To persist changes in a stateless system, I use Alpine’s `lbu`: + +```sh +lbu include /etc/blocky/config.yml +lbu include /etc/ngircd/ngircd.conf +lbu commit -d +``` + +This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM. + +--- + +#### Runlevel Integration + +All services are enabled through OpenRC: + +```sh +rc-update add blocky default +rc-update add wg-quick default +rc-update add ngircd default +rc-update add iptables default +``` + +Boot time is under 10 seconds, with full network stack active by the time DHCP finishes. + +--- + +#### Final Thoughts + +Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC. + + diff --git a/hugo_stats.json b/hugo_stats.json index dc27699..1a2be32 100644 --- a/hugo_stats.json +++ b/hugo_stats.json @@ -77,6 +77,9 @@ "caption-Challange-picture", "caption-Correct-number-order", "caption-Picture-of-the-solution", + "caption-SARV001-Kanji", + "caption-SARV001-Lume", + "caption-SARV001-Lume-whilst-changing-day", "card", "card-body", "card-btn", @@ -272,6 +275,9 @@ "caption-Challange picture", "caption-Correct number order", "caption-Picture of the solution", + "caption-SARV001 Kanji", + "caption-SARV001 Lume", + "caption-SARV001 Lume whilst changing day", "capturing-vs-relaying", "caveats--limitations", "cheap-camera-expensive-risk-hacking-an-iot-ptz-camera", diff --git a/public/blog/index.html b/public/blog/index.html index 6d3b9a6..7143b52 100644 --- a/public/blog/index.html +++ b/public/blog/index.html @@ -994,7 +994,7 @@

Seiko SARV001: The JDM Sleeper That Punches Above Its Weight

-

A closer look at the Seiko SARV001—a Japanese Domestic Market gem that offers …

+

A closer look at the Seiko SARV001, a Japanese Domestic Market gem that offers …

Read More @@ -1192,6 +1192,8 @@ + + @@ -1200,6 +1202,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Smart Home Trap: Isolate or Be Owned + + + + + + diff --git a/public/blog/index.xml b/public/blog/index.xml index d50e061..fad6c15 100644 --- a/public/blog/index.xml +++ b/public/blog/index.xml @@ -34,7 +34,7 @@ http://localhost:1313/blog/post-9/ Fri, 30 May 2025 00:00:00 +0000 http://localhost:1313/blog/post-9/ - <p>In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.</p> + <p>In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.</p> Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks @@ -48,7 +48,7 @@ http://localhost:1313/blog/post-10/ Fri, 30 May 2025 00:00:00 +0000 http://localhost:1313/blog/post-10/ - <h1 id="the-smart-home-trap-isolate-or-be-owned">The Smart Home Trap: Isolate or Be Owned</h1> <p>Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you&rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.</p> + <p>Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you&rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.</p> Red Team Talk: Een Blik Achter de Schermen bij Offensive Security diff --git a/public/blog/post-10/index.html b/public/blog/post-10/index.html new file mode 100644 index 0000000..212fed3 --- /dev/null +++ b/public/blog/post-10/index.html @@ -0,0 +1,9480 @@ + + + + + + +The Smart Home Trap: Isolate or Be Owned + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The Smart Home Trap: Isolate or Be Owned + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+
+ +

The Smart Home Trap: Isolate or Be Owned

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Smart Home Trap: Isolate or Be Owned + + + + + + + + + + + +
+ + +
+

Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you’ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.

+
+

Why Segmentation Matters

+

Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.

+

IoT vendors prioritize cost and features, not security. Devices often ship with:

+
    +
  • Default credentials
  • +
  • No software updates
  • +
  • Open ports and broadcast protocols
  • +
  • Aggressive telemetry to unknown hosts
  • +
+

A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?

+
+

VLANs 101

+

A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.

+

VLANs let you:

+
    +
  • Group devices by function (IoT, work, guest)
  • +
  • Apply granular rules between segments
  • +
  • Limit broadcast traffic and discovery protocols
  • +
  • Deny unnecessary cross-talk
  • +
+

And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.

+
+

Sample Home Setup

+

Let’s say you have a smart home with:

+
    +
  • A Nest thermostat
  • +
  • A Samsung smart TV
  • +
  • A couple of Tuya smart plugs
  • +
  • A doorbell camera
  • +
  • Your personal laptop and NAS
  • +
+

Step 1: Define VLANs

+ + + + + + + + + + + + + + + + + + + + + + + + + +
VLAN IDPurposeExample Devices
10LAN (trusted)Laptop, NAS
20IoTSmart TV, plugs, doorbell
30Guest WiFiFriends’ phones
+

Step 2: Assign Interfaces

+

Most routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.

+

Step 3: Firewall Rules

+

On VLAN 20 (IoT):

+
    +
  • Block → LAN (VLAN 10)
  • +
  • Block → VLAN 20 (intra-IoT)
  • +
  • Allow → DNS, NTP, and cloud endpoints
  • +
  • Allow → Internet (443)
  • +
  • Log → Any unknown destination
  • +
+

Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.

+
+

Real-World Examples

+

Case 1: Smart TV

+

Blocked LAN access. Within 5 minutes of boot, it tried to contact:

+
    +
  • Samsung cloud
  • +
  • Akamai CDN
  • +
  • Google DNS
  • +
  • DoubleClick
  • +
  • Random advertising domains
  • +
+

Video streaming still worked fine. Everything else was noise.

+

Case 2: IP Camera

+

On the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.

+
+

Caveats & Limitations

+
    +
  • Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking.
  • +
  • Chromecast-style devices need special rules if you want casting from your main network.
  • +
  • VLANs require managed switches or VLAN-aware APs.
  • +
  • Guest VLANs may need bandwidth limits or isolation tweaks.
  • +
+

Still, the benefits far outweigh the complexity.

+
+

Final Thoughts

+

If you’ve ever installed a smart plug and noticed it phones home every few minutes, you’re not alone. And if you haven’t noticed, maybe you should.

+

Security in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.

+

Your lightbulb shouldn’t have access to your tax documents.

+ + + + + + + +
+
+ +

Tip

+
+

Looking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.

+
+ + +
+
+
+
+
+
+ + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/blog/post-5/index.html b/public/blog/post-5/index.html new file mode 100644 index 0000000..a0b33ff --- /dev/null +++ b/public/blog/post-5/index.html @@ -0,0 +1,9386 @@ + + + + + + +Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+
+ +

Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks + + + + + + + + + + + +
+ + +
+

In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.

+

Name Resolution Chaos

+

When Windows can’t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”

+

An attacker on the local network can answer “yes” and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.

+

IPv6: Enabled by Default, Forgotten by Admins

+

Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there’s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.

+

Once clients start resolving names through the attacker’s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.

+

Capturing vs. Relaying

+

Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it’s often more powerful to relay them live to a legitimate service.

+

Tools like ntlmrelayx allow relaying to:

+
    +
  • SMB: for file access, command execution, or dumping secrets via secretsdump.py
  • +
  • LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts
  • +
  • HTTP/WSMAN: to access internal web apps or trigger remote code execution
  • +
+

The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.

+

Realistic Attack Chain

+
    +
  1. Launch mitm6 to poison IPv6 and become DNS for the subnet.
  2. +
  3. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5).
  4. +
  5. Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds.
  6. +
  7. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials.
  8. +
  9. ntlmrelayx relays these to the actual target server.
  10. +
  11. If successful, the attacker gains authenticated access.
  12. +
+

In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.

+

Mitigation

+

This isn’t new, but it’s often neglected. To prevent these attacks:

+
    +
  • Disable LLMNR and NBT-NS via Group Policy.
  • +
  • Disable IPv6 on clients if it’s not explicitly required.
  • +
  • Enforce SMB signing and LDAP channel binding.
  • +
  • Segment your network to reduce the blast radius.
  • +
  • Prefer Kerberos authentication over NTLM where possible.
  • +
  • Monitor for rogue IPv6 RAs and anomalous name resolution.
  • +
+

Final Thoughts

+

If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.

+

Responder and mitm6 aren’t magic. They just reveal what’s already broken.

+ +
+
+
+
+
+
+ + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/blog/post-6/index.html b/public/blog/post-6/index.html new file mode 100644 index 0000000..7f3d8f5 --- /dev/null +++ b/public/blog/post-6/index.html @@ -0,0 +1,9511 @@ + + + + + + +Matrix: Building a Decentralized Communication Future + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Matrix: Building a Decentralized Communication Future + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+
+ +

Matrix: Building a Decentralized Communication Future

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Matrix: Building a Decentralized Communication Future + + + + + + + + + + + +
+ + +
+

If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn’t trapped in walled gardens.

+

In this post, we explore what Matrix is, how it works, where it’s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.

+
+

What is Matrix?

+

Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.

+

Matrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.

+

Matrix supports:

+
    +
  • Text messaging (1:1 and group)
  • +
  • End-to-end encryption (Olm/Megolm)
  • +
  • Voice and video calls (WebRTC)
  • +
  • File sharing
  • +
  • Threaded conversations
  • +
  • Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.)
  • +
  • Bots, widgets, and integrations
  • +
+
+

Federation and Interoperability

+

The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.

+

Bridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.

+

Supported bridge targets include:

+
    +
  • Slack
  • +
  • Discord
  • +
  • Microsoft Teams
  • +
  • IRC
  • +
  • Telegram
  • +
  • WhatsApp
  • +
  • Signal (community bridges)
  • +
+
+

Security: End-to-End Encryption by Default

+

Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.

+

Encryption features include:

+
    +
  • Forward secrecy
  • +
  • Device verification and cross-signing
  • +
  • Secure backup with recovery keys
  • +
  • Key sharing and gossiping for reliable message delivery
  • +
  • Support for multiple devices per user
  • +
+

In contrast to Signal, Matrix’s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.

+
+

Real-World Usage

+

Matrix is not just experimental, it’s deployed at scale:

+
    +
  • The French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries.
  • +
  • German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards.
  • +
  • Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration.
  • +
  • The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations.
  • +
+
+

Matrix in Cybersecurity Contexts

+

In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:

+
    +
  • Out-of-band communication when primary networks are compromised.
  • +
  • C2 channel simulation in adversary emulation labs.
  • +
  • Logging and transparency during incident response (Matrix rooms retain full audit trails).
  • +
  • Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management).
  • +
  • Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios.
  • +
+

In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.

+
+

Running Your Own Homeserver

+

Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.

+

Minimum Setup:

+
    +
  • Synapse (Python-based)
  • +
  • PostgreSQL backend
  • +
  • Reverse proxy (NGINX)
  • +
  • DNS (SRV + .well-known for federation)
  • +
  • TLS via Let’s Encrypt
  • +
  • Optional: SSO, LDAP, backup, TURN server for VoIP
  • +
+

Pro Tips:

+
    +
  • Use https://element.io/pricing for managed hosting if self-hosting is too much overhead.
  • +
  • Enable E2EE backup to retain message history across devices.
  • +
  • Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers.
  • +
+
+

Limitations and Workarounds

+

Matrix is powerful, but not perfect:

+
    +
  • Federation sync can be resource-heavy on large rooms.
  • +
  • Encrypted rooms sometimes lag on low-powered clients.
  • +
  • Bridges can break when third-party APIs change.
  • +
  • Identity is room-based, no global handles like @user across servers.
  • +
  • Message ordering across federated servers is eventually consistent, not immediate.
  • +
+

Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.

+
+

Final Thoughts

+

Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It’s not just a protocol. It’s a philosophy of sovereignty, transparency, and trustless interoperability.

+

Whether you’re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.

+ + + + + + + +
+
+ +

Tip

+
+

Visit matrix.org to learn more, or get started today at element.io.

+
+ + +
+
+
+
+
+
+ + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/blog/post-7/index.html b/public/blog/post-7/index.html new file mode 100644 index 0000000..ee0bb96 --- /dev/null +++ b/public/blog/post-7/index.html @@ -0,0 +1,9384 @@ + + + + + + +Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+
+ +

Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains + + + + + + + + + + + +
+ + +
+

Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.

+
+

How Kerberos Actually Works

+

Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.

+

From a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.

+

Spoiler: they rarely are.

+
+

Kerberoasting: Plaintext Passwords in Disguise

+

If a service account uses a weak password, it’s game over.

+

Service tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.

+
Request SPN ticket → Extract ticket → Crack with hashcat
+

Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.

+

Default AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.

+
+

Delegation: More Trust, More Problems

+

Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.

+

Unconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.

+

Constrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.

+

These trust edges form a privilege escalation graph. BloodHound maps this beautifully.

+
+

Ticket Forgery and Impersonation

+

Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.

+

More subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.

+

Tools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.

+
+

Worked Example: Kerberoasting with Rubeus

+
Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local
+

→ Dumps service tickets in hashcat format.

+
hashcat -m 13100 hashes.txt rockyou.txt
+

→ Cracks the SPN ticket. If the password is weak, you’re in.

+

This is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.

+
+

Final Thoughts

+

Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.

+

Strong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.

+

In red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.

+

Want to defend the kingdom? Start by defending the keys.

+ +
+
+
+
+
+
+ + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/blog/post-8/index.html b/public/blog/post-8/index.html new file mode 100644 index 0000000..c72eaf5 --- /dev/null +++ b/public/blog/post-8/index.html @@ -0,0 +1,9389 @@ + + + + + + +Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+
+ +

Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera + + + + + + + + + + + +
+ + +
+

When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?

+

This post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.

+
+

Triggering Debug Mode with a MicroSD Card

+

Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.

+

Insert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.

+

This is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.

+
+

UART Interface: Disabled Login, But Still There

+

A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.

+

Combined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.

+
+

What Could Go Wrong?

+

Plenty. With root access via SD card:

+
    +
  • You can replace binaries or inject backdoors.
  • +
  • Extract credentials, keys, or tokens stored in the SQLite database.
  • +
  • Modify the video stream, disable motion detection, or proxy footage.
  • +
  • Use the device as a pivot point in a local network attack.
  • +
+

All of this without triggering any alarms, logs, or user notifications.

+
+

But It Encrypts Traffic?

+

Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.

+

But physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.

+
+

What Can Be Done?

+

Fixing this requires more than software updates. It’s about rethinking assumptions.

+
    +
  • Factory debug hooks should be disabled or removed before shipment.
  • +
  • Bootloaders should verify signatures, not blindly trust SD cards.
  • +
  • Telnet should never be enabled automatically, ever.
  • +
  • Sensitive functions should not run as root unless absolutely required.
  • +
+

Until then, buyers are getting more than they bargained for.

+
+

Final Thoughts

+

This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.

+

If you’re building IoT gear: assume physical access and plan for it. +If you’re buying IoT gear: assume nothing until you’ve torn it apart.

+

Security is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.

+
+ +
+
+
+
+
+
+ + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/blog/post-9/index.html b/public/blog/post-9/index.html new file mode 100644 index 0000000..594ad54 --- /dev/null +++ b/public/blog/post-9/index.html @@ -0,0 +1,9587 @@ + + + + + + +Seiko SARV001: The JDM Sleeper That Punches Above Its Weight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Seiko SARV001: The JDM Sleeper That Punches Above Its Weight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+
+ +

Seiko SARV001: The JDM Sleeper That Punches Above Its Weight

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Seiko SARV001: The JDM Sleeper That Punches Above Its Weight + + + + + + + + + + + +
+ + +
+

In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.

+
+

Design & Build Quality

+

The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o’clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + alter-text + +
+ SARV001 Kanji +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + alter-text + +
+ SARV001 Lume +
+
+ + + + + + + + + + + +
+

The case is protected by Seiko’s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch’s mechanical heart.

+
+

Movement & Performance

+

At its core, the SARV001 is powered by Seiko’s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it’s not designed for diving.

+
+

Wearability & Versatility

+

The watch’s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.

+
+

Value Proposition

+

Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.

+
+

Final Thoughts

+

The Seiko SARV001 exemplifies the brand’s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.

+
+ +
+
+
+
+
+
+ + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/public/categories/\\cybersecurity-offensive-windows/index.xml" "b/public/categories/\\cybersecurity-offensive-windows/index.xml" new file mode 100644 index 0000000..f6ebe42 --- /dev/null +++ "b/public/categories/\\cybersecurity-offensive-windows/index.xml" @@ -0,0 +1,11 @@ + + + + \["Cybersecurity", "Offensive", "Windows"] on Joren's Site + http://localhost:1313/categories/%5Ccybersecurity-offensive-windows/ + Recent content in \["Cybersecurity", "Offensive", "Windows"] on Joren's Site + Hugo + en + + + diff --git "a/public/categories/\\self-hosting-networking-alpine-linux-vpn-dns/index.xml" "b/public/categories/\\self-hosting-networking-alpine-linux-vpn-dns/index.xml" new file mode 100644 index 0000000..c7e92da --- /dev/null +++ "b/public/categories/\\self-hosting-networking-alpine-linux-vpn-dns/index.xml" @@ -0,0 +1,11 @@ + + + + \["Self-Hosting", "Networking", "Alpine-Linux", "Vpn", "Dns"] on Joren's Site + http://localhost:1313/categories/%5Cself-hosting-networking-alpine-linux-vpn-dns/ + Recent content in \["Self-Hosting", "Networking", "Alpine-Linux", "Vpn", "Dns"] on Joren's Site + Hugo + en + + + diff --git a/public/categories/alpine-linux/index.html b/public/categories/alpine-linux/index.html new file mode 100644 index 0000000..11789e1 --- /dev/null +++ b/public/categories/alpine-linux/index.html @@ -0,0 +1,9378 @@ + + + + + + +Alpine-Linux + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Alpine-Linux

+
+
+ +
+ +
+ +
+
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/alpine-linux/index.xml b/public/categories/alpine-linux/index.xml new file mode 100644 index 0000000..a6e31a9 --- /dev/null +++ b/public/categories/alpine-linux/index.xml @@ -0,0 +1,19 @@ + + + + Alpine-Linux on Joren's Site + https://joren.blog/categories/alpine-linux/ + Recent content in Alpine-Linux on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Lean and Local: DNS, VPN, IRC and Ad Blocking + https://joren.blog/project/project-3/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/project/project-3/ + <p>Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.</p> + + + diff --git a/public/categories/communication/index.html b/public/categories/communication/index.html new file mode 100644 index 0000000..3cb8191 --- /dev/null +++ b/public/categories/communication/index.html @@ -0,0 +1,9370 @@ + + + + + + +Communication + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Communication

+
+ +
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/communication/index.xml b/public/categories/communication/index.xml new file mode 100644 index 0000000..535064c --- /dev/null +++ b/public/categories/communication/index.xml @@ -0,0 +1,19 @@ + + + + Communication on Joren's Site + https://joren.blog/categories/communication/ + Recent content in Communication on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Matrix: Building a Decentralized Communication Future + https://joren.blog/blog/post-6/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-6/ + <p>If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn&rsquo;t trapped in walled gardens.</p> + + + diff --git a/public/categories/ctf/index.html b/public/categories/ctf/index.html index 285992d..aa538c2 100644 --- a/public/categories/ctf/index.html +++ b/public/categories/ctf/index.html @@ -1,7 +1,7 @@ - + CTF @@ -70,6 +70,7 @@ + @@ -153,8 +154,8 @@ - - + + @@ -181,7 +182,7 @@ - + @@ -263,9 +264,12 @@ + + - + + @@ -275,6 +279,9 @@ + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Decentralization

+
+ +
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/decentralization/index.xml b/public/categories/decentralization/index.xml new file mode 100644 index 0000000..77c0532 --- /dev/null +++ b/public/categories/decentralization/index.xml @@ -0,0 +1,19 @@ + + + + Decentralization on Joren's Site + http://localhost:1313/categories/decentralization/ + Recent content in Decentralization on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Matrix: Building a Decentralized Communication Future + http://localhost:1313/blog/post-6/ + Fri, 30 May 2025 00:00:00 +0000 + http://localhost:1313/blog/post-6/ + <p>If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn&rsquo;t trapped in walled gardens.</p> + + + diff --git a/public/categories/defense/index.html b/public/categories/defense/index.html index 90aeeeb..74c78c5 100644 --- a/public/categories/defense/index.html +++ b/public/categories/defense/index.html @@ -1,7 +1,7 @@ - + Defense @@ -70,6 +70,7 @@ + @@ -153,8 +154,8 @@ - - + + @@ -181,7 +182,7 @@ - + @@ -263,9 +264,12 @@ + + - + + @@ -275,6 +279,9 @@ + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Jdm

+
+
+ +
+ +
+ +
+
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/jdm/index.xml b/public/categories/jdm/index.xml new file mode 100644 index 0000000..746cf75 --- /dev/null +++ b/public/categories/jdm/index.xml @@ -0,0 +1,19 @@ + + + + Jdm on Joren's Site + https://joren.blog/categories/jdm/ + Recent content in Jdm on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Seiko SARV001: The JDM Sleeper That Punches Above Its Weight + https://joren.blog/blog/post-9/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-9/ + <p>In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.</p> + + + diff --git a/public/categories/network/index.html b/public/categories/network/index.html new file mode 100644 index 0000000..1d8aea0 --- /dev/null +++ b/public/categories/network/index.html @@ -0,0 +1,9370 @@ + + + + + + +Network + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Network

+
+ +
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/network/index.xml b/public/categories/network/index.xml new file mode 100644 index 0000000..880dea9 --- /dev/null +++ b/public/categories/network/index.xml @@ -0,0 +1,19 @@ + + + + Network on Joren's Site + https://joren.blog/categories/network/ + Recent content in Network on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks + https://joren.blog/blog/post-5/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-5/ + <p>In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using <code>Responder</code> and <code>mitm6</code>.</p> + + + diff --git a/public/categories/networking/index.html b/public/categories/networking/index.html new file mode 100644 index 0000000..adecb73 --- /dev/null +++ b/public/categories/networking/index.html @@ -0,0 +1,9462 @@ + + + + + + +Networking + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Networking

+
+
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/networking/index.xml b/public/categories/networking/index.xml new file mode 100644 index 0000000..2a5feae --- /dev/null +++ b/public/categories/networking/index.xml @@ -0,0 +1,26 @@ + + + + Networking on Joren's Site + https://joren.blog/categories/networking/ + Recent content in Networking on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Lean and Local: DNS, VPN, IRC and Ad Blocking + https://joren.blog/project/project-3/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/project/project-3/ + <p>Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.</p> + + + The Smart Home Trap: Isolate or Be Owned + https://joren.blog/blog/post-10/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-10/ + <h1 id="the-smart-home-trap-isolate-or-be-owned">The Smart Home Trap: Isolate or Be Owned</h1> <p>Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you&rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.</p> + + + diff --git a/public/categories/offensive/index.html b/public/categories/offensive/index.html new file mode 100644 index 0000000..245e3d5 --- /dev/null +++ b/public/categories/offensive/index.html @@ -0,0 +1,9527 @@ + + + + + + +Offensive + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Offensive

+
+ +
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/offensive/index.xml b/public/categories/offensive/index.xml new file mode 100644 index 0000000..5920d05 --- /dev/null +++ b/public/categories/offensive/index.xml @@ -0,0 +1,26 @@ + + + + Offensive on Joren's Site + https://joren.blog/categories/offensive/ + Recent content in Offensive on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains + https://joren.blog/blog/post-7/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-7/ + <p>Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like <strong>Kerberoasting</strong>, <strong>delegation abuse</strong>, and <strong>ticket impersonation</strong>.</p> + + + Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks + https://joren.blog/blog/post-5/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-5/ + <p>In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using <code>Responder</code> and <code>mitm6</code>.</p> + + + diff --git a/public/categories/podcast/index.html b/public/categories/podcast/index.html index 2f4d44b..4faf784 100644 --- a/public/categories/podcast/index.html +++ b/public/categories/podcast/index.html @@ -1,7 +1,7 @@ - + Podcast @@ -70,6 +70,7 @@ + @@ -153,8 +154,8 @@ - - + + @@ -181,7 +182,7 @@ - + @@ -263,9 +264,12 @@ + + - + + @@ -275,6 +279,9 @@ + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Seiko

+
+
+ +
+ +
+ +
+
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/seiko/index.xml b/public/categories/seiko/index.xml new file mode 100644 index 0000000..5904f89 --- /dev/null +++ b/public/categories/seiko/index.xml @@ -0,0 +1,19 @@ + + + + Seiko on Joren's Site + https://joren.blog/categories/seiko/ + Recent content in Seiko on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Seiko SARV001: The JDM Sleeper That Punches Above Its Weight + https://joren.blog/blog/post-9/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-9/ + <p>In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.</p> + + + diff --git a/public/categories/self-hosting/index.html b/public/categories/self-hosting/index.html new file mode 100644 index 0000000..efde1e8 --- /dev/null +++ b/public/categories/self-hosting/index.html @@ -0,0 +1,9378 @@ + + + + + + +Self-Hosting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Self-Hosting

+
+
+ +
+ +
+ +
+
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/self-hosting/index.xml b/public/categories/self-hosting/index.xml new file mode 100644 index 0000000..78e7905 --- /dev/null +++ b/public/categories/self-hosting/index.xml @@ -0,0 +1,19 @@ + + + + Self-Hosting on Joren's Site + https://joren.blog/categories/self-hosting/ + Recent content in Self-Hosting on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Lean and Local: DNS, VPN, IRC and Ad Blocking + https://joren.blog/project/project-3/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/project/project-3/ + <p>Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.</p> + + + diff --git a/public/categories/vpn/index.html b/public/categories/vpn/index.html new file mode 100644 index 0000000..b4b9639 --- /dev/null +++ b/public/categories/vpn/index.html @@ -0,0 +1,9378 @@ + + + + + + +Vpn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Vpn

+
+
+ +
+ +
+ +
+
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/vpn/index.xml b/public/categories/vpn/index.xml new file mode 100644 index 0000000..9654f0f --- /dev/null +++ b/public/categories/vpn/index.xml @@ -0,0 +1,19 @@ + + + + Vpn on Joren's Site + https://joren.blog/categories/vpn/ + Recent content in Vpn on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Lean and Local: DNS, VPN, IRC and Ad Blocking + https://joren.blog/project/project-3/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/project/project-3/ + <p>Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.</p> + + + diff --git a/public/categories/watches/index.html b/public/categories/watches/index.html new file mode 100644 index 0000000..85cdecb --- /dev/null +++ b/public/categories/watches/index.html @@ -0,0 +1,9370 @@ + + + + + + +Watches + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Watches

+
+
+ +
+ +
+ +
+
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/watches/index.xml b/public/categories/watches/index.xml new file mode 100644 index 0000000..0421ae0 --- /dev/null +++ b/public/categories/watches/index.xml @@ -0,0 +1,19 @@ + + + + Watches on Joren's Site + https://joren.blog/categories/watches/ + Recent content in Watches on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Seiko SARV001: The JDM Sleeper That Punches Above Its Weight + https://joren.blog/blog/post-9/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-9/ + <p>In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.</p> + + + diff --git a/public/categories/windows/index.html b/public/categories/windows/index.html new file mode 100644 index 0000000..bf19069 --- /dev/null +++ b/public/categories/windows/index.html @@ -0,0 +1,9370 @@ + + + + + + +Windows + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Joren's Site + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+ +

Category

+ +

//Windows

+
+ +
+
+
+
+ + + + +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/categories/windows/index.xml b/public/categories/windows/index.xml new file mode 100644 index 0000000..2060fb4 --- /dev/null +++ b/public/categories/windows/index.xml @@ -0,0 +1,19 @@ + + + + Windows on Joren's Site + https://joren.blog/categories/windows/ + Recent content in Windows on Joren's Site + Hugo + en + Fri, 30 May 2025 00:00:00 +0000 + + + Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains + https://joren.blog/blog/post-7/ + Fri, 30 May 2025 00:00:00 +0000 + https://joren.blog/blog/post-7/ + <p>Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like <strong>Kerberoasting</strong>, <strong>delegation abuse</strong>, and <strong>ticket impersonation</strong>.</p> + + + diff --git a/public/css/style.af64285d60a6cb7cb62ddf607404d8222a33b5fd6b0c9aacafef33456be01ed2.css b/public/css/style.af64285d60a6cb7cb62ddf607404d8222a33b5fd6b0c9aacafef33456be01ed2.css new file mode 100644 index 0000000..80c036b --- /dev/null +++ b/public/css/style.af64285d60a6cb7cb62ddf607404d8222a33b5fd6b0c9aacafef33456be01ed2.css @@ -0,0 +1,18567 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +:root, +:host { + --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; +} + +@font-face { + font-family: "Font Awesome 6 Brands"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/webfonts/fa-brands-400.woff2") + format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/webfonts/fa-brands-400.ttf") + format("truetype"); +} + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; }/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ + :root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/webfonts/fa-solid-900.woff2") + format("woff2"), + url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/webfonts/fa-solid-900.ttf") + format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ + .fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-arrow-turn-right::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +/*! + * Glightbox v3.1.0 + * https://github.com/biati-digital/glightbox + * Released under the MIT license + */ + +.glightbox-container { + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 999999 !important; + overflow: hidden; + -ms-touch-action: none; + touch-action: none; + -webkit-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + text-size-adjust: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + outline: 0; + overflow: hidden; +} +.glightbox-container.inactive { + display: none; +} +.glightbox-container .gcontainer { + position: relative; + width: 100%; + height: 100%; + z-index: 9999; + overflow: hidden; +} +.glightbox-container .gslider { + -webkit-transition: -webkit-transform 0.4s ease; + transition: -webkit-transform 0.4s ease; + transition: transform 0.4s ease; + transition: transform 0.4s ease, -webkit-transform 0.4s ease; + height: 100%; + left: 0; + top: 0; + width: 100%; + position: relative; + overflow: hidden; + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.glightbox-container .gslide { + width: 100%; + position: absolute; + opacity: 1; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + opacity: 0; +} +.glightbox-container .gslide.current { + opacity: 1; + z-index: 99999; + position: relative; +} +.glightbox-container .gslide.prev { + opacity: 1; + z-index: 9999; +} +.glightbox-container .gslide-inner-content { + width: 100%; +} +.glightbox-container .ginner-container { + position: relative; + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + max-width: 100%; + margin: auto; + height: 100vh; +} +.glightbox-container .ginner-container.gvideo-container { + width: 100%; +} +.glightbox-container .ginner-container.desc-bottom, +.glightbox-container .ginner-container.desc-top { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.glightbox-container .ginner-container.desc-left, +.glightbox-container .ginner-container.desc-right { + max-width: 100% !important; +} +.gslide iframe, +.gslide video { + outline: 0 !important; + border: none; + min-height: 165px; + -webkit-overflow-scrolling: touch; + -ms-touch-action: auto; + touch-action: auto; +} +.gslide:not(.current) { + pointer-events: none; +} +.gslide-image { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} +.gslide-image img { + max-height: 100vh; + display: block; + padding: 0; + float: none; + outline: 0; + border: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + max-width: 100vw; + width: auto; + height: auto; + -o-object-fit: cover; + object-fit: cover; + -ms-touch-action: none; + touch-action: none; + margin: auto; + min-width: 200px; +} +.desc-bottom .gslide-image img, +.desc-top .gslide-image img { + width: auto; +} +.desc-left .gslide-image img, +.desc-right .gslide-image img { + width: auto; + max-width: 100%; +} +.gslide-image img.zoomable { + position: relative; +} +.gslide-image img.dragging { + cursor: -webkit-grabbing !important; + cursor: grabbing !important; + -webkit-transition: none; + transition: none; +} +.gslide-video { + position: relative; + max-width: 100vh; + width: 100% !important; +} +.gslide-video .gvideo-wrapper { + width: 100%; + margin: auto; +} +.gslide-video::before { + content: ""; + display: block; + position: absolute; + width: 100%; + height: 100%; + background: rgba(255, 0, 0, 0.34); + display: none; +} +.gslide-video.playing::before { + display: none; +} +.gslide-video.fullscreen { + max-width: 100% !important; + min-width: 100%; + height: 75vh; +} +.gslide-video.fullscreen video { + max-width: 100% !important; + width: 100% !important; +} +.gslide-inline { + background: #fff; + text-align: left; + max-height: calc(100vh - 40px); + overflow: auto; + max-width: 100%; +} +.gslide-inline .ginlined-content { + padding: 20px; + width: 100%; +} +.gslide-inline .dragging { + cursor: -webkit-grabbing !important; + cursor: grabbing !important; + -webkit-transition: none; + transition: none; +} +.ginlined-content { + overflow: auto; + display: block !important; + opacity: 1; +} +.gslide-external { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 100%; + min-width: 100%; + background: #fff; + padding: 0; + overflow: auto; + max-height: 75vh; + height: 100%; +} +.gslide-media { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: auto; +} +.zoomed .gslide-media { + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.desc-bottom .gslide-media, +.desc-top .gslide-media { + margin: 0 auto; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.gslide-description { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 0 100%; + flex: 1 0 100%; +} +.gslide-description.description-left, +.gslide-description.description-right { + max-width: 100%; +} +.gslide-description.description-bottom, +.gslide-description.description-top { + margin: 0 auto; + width: 100%; +} +.gslide-description p { + margin-bottom: 12px; +} +.gslide-description p:last-child { + margin-bottom: 0; +} +.zoomed .gslide-description { + display: none; +} +.glightbox-button-hidden { + display: none; +} +.glightbox-mobile .glightbox-container .gslide-description { + height: auto !important; + width: 100%; + background: 0 0; + position: absolute; + bottom: 0; + padding: 19px 11px; + max-width: 100vw !important; + -webkit-box-ordinal-group: 3 !important; + -ms-flex-order: 2 !important; + order: 2 !important; + max-height: 78vh; + overflow: auto !important; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(rgba(0, 0, 0, 0)), + to(rgba(0, 0, 0, 0.75)) + ); + background: linear-gradient( + to bottom, + rgba(0, 0, 0, 0) 0, + rgba(0, 0, 0, 0.75) 100% + ); + -webkit-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; + padding-bottom: 50px; +} +.glightbox-mobile .glightbox-container .gslide-title { + color: #fff; + font-size: 1em; +} +.glightbox-mobile .glightbox-container .gslide-desc { + color: #a1a1a1; +} +.glightbox-mobile .glightbox-container .gslide-desc a { + color: #fff; + font-weight: 700; +} +.glightbox-mobile .glightbox-container .gslide-desc * { + color: inherit; +} +.glightbox-mobile .glightbox-container .gslide-desc string { + color: #fff; +} +.glightbox-mobile .glightbox-container .gslide-desc .desc-more { + color: #fff; + opacity: 0.4; +} +.gdesc-open .gslide-media { + -webkit-transition: opacity 0.5s ease; + transition: opacity 0.5s ease; + opacity: 0.4; +} +.gdesc-open .gdesc-inner { + padding-bottom: 30px; +} +.gdesc-closed .gslide-media { + -webkit-transition: opacity 0.5s ease; + transition: opacity 0.5s ease; + opacity: 1; +} +.greset { + -webkit-transition: all 0.3s ease; + transition: all 0.3s ease; +} +.gabsolute { + position: absolute; +} +.grelative { + position: relative; +} +.glightbox-desc { + display: none !important; +} +.glightbox-open { + overflow: hidden; +} +.gloader { + height: 25px; + width: 25px; + -webkit-animation: lightboxLoader 0.8s infinite linear; + animation: lightboxLoader 0.8s infinite linear; + border: 2px solid #fff; + border-right-color: transparent; + border-radius: 50%; + position: absolute; + display: block; + z-index: 9999; + left: 0; + right: 0; + margin: 0 auto; + top: 47%; +} +.goverlay { + width: 100%; + height: calc(100vh + 1px); + position: fixed; + top: -1px; + left: 0; + background: #000; + will-change: opacity; +} +.glightbox-mobile .goverlay { + background: #000; +} +.gclose, +.gnext, +.gprev { + z-index: 99999; + cursor: pointer; + width: 26px; + height: 44px; + border: none; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.gclose svg, +.gnext svg, +.gprev svg { + display: block; + width: 25px; + height: auto; + margin: 0; + padding: 0; +} +.gclose.disabled, +.gnext.disabled, +.gprev.disabled { + opacity: 0.1; +} +.gclose .garrow, +.gnext .garrow, +.gprev .garrow { + stroke: #fff; +} +.gbtn.focused { + outline: 2px solid #0f3d81; +} +iframe.wait-autoplay { + opacity: 0; +} +.glightbox-closing .gclose, +.glightbox-closing .gnext, +.glightbox-closing .gprev { + opacity: 0 !important; +} +.glightbox-clean .gslide-description { + background: #fff; +} +.glightbox-clean .gdesc-inner { + padding: 22px 20px; +} +.glightbox-clean .gslide-title { + font-size: 1em; + font-weight: 400; + font-family: arial; + color: #000; + margin-bottom: 19px; + line-height: 1.4em; +} +.glightbox-clean .gslide-desc { + font-size: 0.86em; + margin-bottom: 0; + font-family: arial; + line-height: 1.4em; +} +.glightbox-clean .gslide-video { + background: #000; +} +.glightbox-clean .gclose, +.glightbox-clean .gnext, +.glightbox-clean .gprev { + background-color: rgba(0, 0, 0, 0.75); + border-radius: 4px; +} +.glightbox-clean .gclose path, +.glightbox-clean .gnext path, +.glightbox-clean .gprev path { + fill: #fff; +} +.glightbox-clean .gprev { + position: absolute; + top: -100%; + left: 30px; + width: 40px; + height: 50px; +} +.glightbox-clean .gnext { + position: absolute; + top: -100%; + right: 30px; + width: 40px; + height: 50px; +} +.glightbox-clean .gclose { + width: 35px; + height: 35px; + top: 15px; + right: 10px; + position: absolute; +} +.glightbox-clean .gclose svg { + width: 18px; + height: auto; +} +.glightbox-clean .gclose:hover { + opacity: 1; +} +.gfadeIn { + -webkit-animation: gfadeIn 0.5s ease; + animation: gfadeIn 0.5s ease; +} +.gfadeOut { + -webkit-animation: gfadeOut 0.5s ease; + animation: gfadeOut 0.5s ease; +} +.gslideOutLeft { + -webkit-animation: gslideOutLeft 0.3s ease; + animation: gslideOutLeft 0.3s ease; +} +.gslideInLeft { + -webkit-animation: gslideInLeft 0.3s ease; + animation: gslideInLeft 0.3s ease; +} +.gslideOutRight { + -webkit-animation: gslideOutRight 0.3s ease; + animation: gslideOutRight 0.3s ease; +} +.gslideInRight { + -webkit-animation: gslideInRight 0.3s ease; + animation: gslideInRight 0.3s ease; +} +.gzoomIn { + -webkit-animation: gzoomIn 0.5s ease; + animation: gzoomIn 0.5s ease; +} +.gzoomOut { + -webkit-animation: gzoomOut 0.5s ease; + animation: gzoomOut 0.5s ease; +} +@-webkit-keyframes lightboxLoader { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes lightboxLoader { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes gfadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes gfadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@-webkit-keyframes gfadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} +@keyframes gfadeOut { + from { + opacity: 1; + } + to { + opacity: 0; + } +} +@-webkit-keyframes gslideInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-60%, 0, 0); + transform: translate3d(-60%, 0, 0); + } + to { + visibility: visible; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@keyframes gslideInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-60%, 0, 0); + transform: translate3d(-60%, 0, 0); + } + to { + visibility: visible; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@-webkit-keyframes gslideOutLeft { + from { + opacity: 1; + visibility: visible; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(-60%, 0, 0); + transform: translate3d(-60%, 0, 0); + opacity: 0; + visibility: hidden; + } +} +@keyframes gslideOutLeft { + from { + opacity: 1; + visibility: visible; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(-60%, 0, 0); + transform: translate3d(-60%, 0, 0); + opacity: 0; + visibility: hidden; + } +} +@-webkit-keyframes gslideInRight { + from { + opacity: 0; + visibility: visible; + -webkit-transform: translate3d(60%, 0, 0); + transform: translate3d(60%, 0, 0); + } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@keyframes gslideInRight { + from { + opacity: 0; + visibility: visible; + -webkit-transform: translate3d(60%, 0, 0); + transform: translate3d(60%, 0, 0); + } + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} +@-webkit-keyframes gslideOutRight { + from { + opacity: 1; + visibility: visible; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(60%, 0, 0); + transform: translate3d(60%, 0, 0); + opacity: 0; + } +} +@keyframes gslideOutRight { + from { + opacity: 1; + visibility: visible; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + to { + -webkit-transform: translate3d(60%, 0, 0); + transform: translate3d(60%, 0, 0); + opacity: 0; + } +} +@-webkit-keyframes gzoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + to { + opacity: 1; + } +} +@keyframes gzoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + to { + opacity: 1; + } +} +@-webkit-keyframes gzoomOut { + from { + opacity: 1; + } + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + to { + opacity: 0; + } +} +@keyframes gzoomOut { + from { + opacity: 1; + } + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + to { + opacity: 0; + } +} +@media (min-width: 769px) { + .glightbox-container .ginner-container { + width: auto; + height: auto; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .glightbox-container .ginner-container.desc-top .gslide-description { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .glightbox-container .ginner-container.desc-top .gslide-image, + .glightbox-container .ginner-container.desc-top .gslide-image img { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .glightbox-container .ginner-container.desc-left .gslide-description { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .glightbox-container .ginner-container.desc-left .gslide-image { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .gslide-image img { + max-height: 97vh; + max-width: 100%; + } + .gslide-image img.zoomable { + cursor: -webkit-zoom-in; + cursor: zoom-in; + } + .zoomed .gslide-image img.zoomable { + cursor: -webkit-grab; + cursor: grab; + } + .gslide-inline { + max-height: 95vh; + } + .gslide-external { + max-height: 100vh; + } + .gslide-description.description-left, + .gslide-description.description-right { + max-width: 275px; + } + .glightbox-open { + height: auto; + } + .goverlay { + background: rgba(0, 0, 0, 0.92); + } + .glightbox-clean .gslide-media { + -webkit-box-shadow: 1px 2px 9px 0 rgba(0, 0, 0, 0.65); + box-shadow: 1px 2px 9px 0 rgba(0, 0, 0, 0.65); + } + .glightbox-clean .description-left .gdesc-inner, + .glightbox-clean .description-right .gdesc-inner { + position: absolute; + height: 100%; + overflow-y: auto; + } + .glightbox-clean .gclose, + .glightbox-clean .gnext, + .glightbox-clean .gprev { + background-color: rgba(0, 0, 0, 0.32); + } + .glightbox-clean .gclose:hover, + .glightbox-clean .gnext:hover, + .glightbox-clean .gprev:hover { + background-color: rgba(0, 0, 0, 0.7); + } + .glightbox-clean .gprev { + top: 45%; + } + .glightbox-clean .gnext { + top: 45%; + } +} +@media (min-width: 992px) { + .glightbox-clean .gclose { + opacity: 0.7; + right: 20px; + } +} +@media screen and (max-height: 420px) { + .goverlay { + background: #000; + } +} +[data-aos][data-aos][data-aos-duration="50"], +body[data-aos-duration="50"] [data-aos] { + transition-duration: 50ms; +} +[data-aos][data-aos][data-aos-delay="50"], +body[data-aos-delay="50"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="50"].aos-animate, +body[data-aos-delay="50"] [data-aos].aos-animate { + transition-delay: 50ms; +} +[data-aos][data-aos][data-aos-duration="100"], +body[data-aos-duration="100"] [data-aos] { + transition-duration: 0.1s; +} +[data-aos][data-aos][data-aos-delay="100"], +body[data-aos-delay="100"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="100"].aos-animate, +body[data-aos-delay="100"] [data-aos].aos-animate { + transition-delay: 0.1s; +} +[data-aos][data-aos][data-aos-duration="150"], +body[data-aos-duration="150"] [data-aos] { + transition-duration: 0.15s; +} +[data-aos][data-aos][data-aos-delay="150"], +body[data-aos-delay="150"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="150"].aos-animate, +body[data-aos-delay="150"] [data-aos].aos-animate { + transition-delay: 0.15s; +} +[data-aos][data-aos][data-aos-duration="200"], +body[data-aos-duration="200"] [data-aos] { + transition-duration: 0.2s; +} +[data-aos][data-aos][data-aos-delay="200"], +body[data-aos-delay="200"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="200"].aos-animate, +body[data-aos-delay="200"] [data-aos].aos-animate { + transition-delay: 0.2s; +} +[data-aos][data-aos][data-aos-duration="250"], +body[data-aos-duration="250"] [data-aos] { + transition-duration: 0.25s; +} +[data-aos][data-aos][data-aos-delay="250"], +body[data-aos-delay="250"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="250"].aos-animate, +body[data-aos-delay="250"] [data-aos].aos-animate { + transition-delay: 0.25s; +} +[data-aos][data-aos][data-aos-duration="300"], +body[data-aos-duration="300"] [data-aos] { + transition-duration: 0.3s; +} +[data-aos][data-aos][data-aos-delay="300"], +body[data-aos-delay="300"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="300"].aos-animate, +body[data-aos-delay="300"] [data-aos].aos-animate { + transition-delay: 0.3s; +} +[data-aos][data-aos][data-aos-duration="350"], +body[data-aos-duration="350"] [data-aos] { + transition-duration: 0.35s; +} +[data-aos][data-aos][data-aos-delay="350"], +body[data-aos-delay="350"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="350"].aos-animate, +body[data-aos-delay="350"] [data-aos].aos-animate { + transition-delay: 0.35s; +} +[data-aos][data-aos][data-aos-duration="400"], +body[data-aos-duration="400"] [data-aos] { + transition-duration: 0.4s; +} +[data-aos][data-aos][data-aos-delay="400"], +body[data-aos-delay="400"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="400"].aos-animate, +body[data-aos-delay="400"] [data-aos].aos-animate { + transition-delay: 0.4s; +} +[data-aos][data-aos][data-aos-duration="450"], +body[data-aos-duration="450"] [data-aos] { + transition-duration: 0.45s; +} +[data-aos][data-aos][data-aos-delay="450"], +body[data-aos-delay="450"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="450"].aos-animate, +body[data-aos-delay="450"] [data-aos].aos-animate { + transition-delay: 0.45s; +} +[data-aos][data-aos][data-aos-duration="500"], +body[data-aos-duration="500"] [data-aos] { + transition-duration: 0.5s; +} +[data-aos][data-aos][data-aos-delay="500"], +body[data-aos-delay="500"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="500"].aos-animate, +body[data-aos-delay="500"] [data-aos].aos-animate { + transition-delay: 0.5s; +} +[data-aos][data-aos][data-aos-duration="550"], +body[data-aos-duration="550"] [data-aos] { + transition-duration: 0.55s; +} +[data-aos][data-aos][data-aos-delay="550"], +body[data-aos-delay="550"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="550"].aos-animate, +body[data-aos-delay="550"] [data-aos].aos-animate { + transition-delay: 0.55s; +} +[data-aos][data-aos][data-aos-duration="600"], +body[data-aos-duration="600"] [data-aos] { + transition-duration: 0.6s; +} +[data-aos][data-aos][data-aos-delay="600"], +body[data-aos-delay="600"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="600"].aos-animate, +body[data-aos-delay="600"] [data-aos].aos-animate { + transition-delay: 0.6s; +} +[data-aos][data-aos][data-aos-duration="650"], +body[data-aos-duration="650"] [data-aos] { + transition-duration: 0.65s; +} +[data-aos][data-aos][data-aos-delay="650"], +body[data-aos-delay="650"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="650"].aos-animate, +body[data-aos-delay="650"] [data-aos].aos-animate { + transition-delay: 0.65s; +} +[data-aos][data-aos][data-aos-duration="700"], +body[data-aos-duration="700"] [data-aos] { + transition-duration: 0.7s; +} +[data-aos][data-aos][data-aos-delay="700"], +body[data-aos-delay="700"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="700"].aos-animate, +body[data-aos-delay="700"] [data-aos].aos-animate { + transition-delay: 0.7s; +} +[data-aos][data-aos][data-aos-duration="750"], +body[data-aos-duration="750"] [data-aos] { + transition-duration: 0.75s; +} +[data-aos][data-aos][data-aos-delay="750"], +body[data-aos-delay="750"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="750"].aos-animate, +body[data-aos-delay="750"] [data-aos].aos-animate { + transition-delay: 0.75s; +} +[data-aos][data-aos][data-aos-duration="800"], +body[data-aos-duration="800"] [data-aos] { + transition-duration: 0.8s; +} +[data-aos][data-aos][data-aos-delay="800"], +body[data-aos-delay="800"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="800"].aos-animate, +body[data-aos-delay="800"] [data-aos].aos-animate { + transition-delay: 0.8s; +} +[data-aos][data-aos][data-aos-duration="850"], +body[data-aos-duration="850"] [data-aos] { + transition-duration: 0.85s; +} +[data-aos][data-aos][data-aos-delay="850"], +body[data-aos-delay="850"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="850"].aos-animate, +body[data-aos-delay="850"] [data-aos].aos-animate { + transition-delay: 0.85s; +} +[data-aos][data-aos][data-aos-duration="900"], +body[data-aos-duration="900"] [data-aos] { + transition-duration: 0.9s; +} +[data-aos][data-aos][data-aos-delay="900"], +body[data-aos-delay="900"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="900"].aos-animate, +body[data-aos-delay="900"] [data-aos].aos-animate { + transition-delay: 0.9s; +} +[data-aos][data-aos][data-aos-duration="950"], +body[data-aos-duration="950"] [data-aos] { + transition-duration: 0.95s; +} +[data-aos][data-aos][data-aos-delay="950"], +body[data-aos-delay="950"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="950"].aos-animate, +body[data-aos-delay="950"] [data-aos].aos-animate { + transition-delay: 0.95s; +} +[data-aos][data-aos][data-aos-duration="1000"], +body[data-aos-duration="1000"] [data-aos] { + transition-duration: 1s; +} +[data-aos][data-aos][data-aos-delay="1000"], +body[data-aos-delay="1000"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1000"].aos-animate, +body[data-aos-delay="1000"] [data-aos].aos-animate { + transition-delay: 1s; +} +[data-aos][data-aos][data-aos-duration="1050"], +body[data-aos-duration="1050"] [data-aos] { + transition-duration: 1.05s; +} +[data-aos][data-aos][data-aos-delay="1050"], +body[data-aos-delay="1050"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1050"].aos-animate, +body[data-aos-delay="1050"] [data-aos].aos-animate { + transition-delay: 1.05s; +} +[data-aos][data-aos][data-aos-duration="1100"], +body[data-aos-duration="1100"] [data-aos] { + transition-duration: 1.1s; +} +[data-aos][data-aos][data-aos-delay="1100"], +body[data-aos-delay="1100"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1100"].aos-animate, +body[data-aos-delay="1100"] [data-aos].aos-animate { + transition-delay: 1.1s; +} +[data-aos][data-aos][data-aos-duration="1150"], +body[data-aos-duration="1150"] [data-aos] { + transition-duration: 1.15s; +} +[data-aos][data-aos][data-aos-delay="1150"], +body[data-aos-delay="1150"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1150"].aos-animate, +body[data-aos-delay="1150"] [data-aos].aos-animate { + transition-delay: 1.15s; +} +[data-aos][data-aos][data-aos-duration="1200"], +body[data-aos-duration="1200"] [data-aos] { + transition-duration: 1.2s; +} +[data-aos][data-aos][data-aos-delay="1200"], +body[data-aos-delay="1200"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1200"].aos-animate, +body[data-aos-delay="1200"] [data-aos].aos-animate { + transition-delay: 1.2s; +} +[data-aos][data-aos][data-aos-duration="1250"], +body[data-aos-duration="1250"] [data-aos] { + transition-duration: 1.25s; +} +[data-aos][data-aos][data-aos-delay="1250"], +body[data-aos-delay="1250"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1250"].aos-animate, +body[data-aos-delay="1250"] [data-aos].aos-animate { + transition-delay: 1.25s; +} +[data-aos][data-aos][data-aos-duration="1300"], +body[data-aos-duration="1300"] [data-aos] { + transition-duration: 1.3s; +} +[data-aos][data-aos][data-aos-delay="1300"], +body[data-aos-delay="1300"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1300"].aos-animate, +body[data-aos-delay="1300"] [data-aos].aos-animate { + transition-delay: 1.3s; +} +[data-aos][data-aos][data-aos-duration="1350"], +body[data-aos-duration="1350"] [data-aos] { + transition-duration: 1.35s; +} +[data-aos][data-aos][data-aos-delay="1350"], +body[data-aos-delay="1350"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1350"].aos-animate, +body[data-aos-delay="1350"] [data-aos].aos-animate { + transition-delay: 1.35s; +} +[data-aos][data-aos][data-aos-duration="1400"], +body[data-aos-duration="1400"] [data-aos] { + transition-duration: 1.4s; +} +[data-aos][data-aos][data-aos-delay="1400"], +body[data-aos-delay="1400"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1400"].aos-animate, +body[data-aos-delay="1400"] [data-aos].aos-animate { + transition-delay: 1.4s; +} +[data-aos][data-aos][data-aos-duration="1450"], +body[data-aos-duration="1450"] [data-aos] { + transition-duration: 1.45s; +} +[data-aos][data-aos][data-aos-delay="1450"], +body[data-aos-delay="1450"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1450"].aos-animate, +body[data-aos-delay="1450"] [data-aos].aos-animate { + transition-delay: 1.45s; +} +[data-aos][data-aos][data-aos-duration="1500"], +body[data-aos-duration="1500"] [data-aos] { + transition-duration: 1.5s; +} +[data-aos][data-aos][data-aos-delay="1500"], +body[data-aos-delay="1500"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1500"].aos-animate, +body[data-aos-delay="1500"] [data-aos].aos-animate { + transition-delay: 1.5s; +} +[data-aos][data-aos][data-aos-duration="1550"], +body[data-aos-duration="1550"] [data-aos] { + transition-duration: 1.55s; +} +[data-aos][data-aos][data-aos-delay="1550"], +body[data-aos-delay="1550"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1550"].aos-animate, +body[data-aos-delay="1550"] [data-aos].aos-animate { + transition-delay: 1.55s; +} +[data-aos][data-aos][data-aos-duration="1600"], +body[data-aos-duration="1600"] [data-aos] { + transition-duration: 1.6s; +} +[data-aos][data-aos][data-aos-delay="1600"], +body[data-aos-delay="1600"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1600"].aos-animate, +body[data-aos-delay="1600"] [data-aos].aos-animate { + transition-delay: 1.6s; +} +[data-aos][data-aos][data-aos-duration="1650"], +body[data-aos-duration="1650"] [data-aos] { + transition-duration: 1.65s; +} +[data-aos][data-aos][data-aos-delay="1650"], +body[data-aos-delay="1650"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1650"].aos-animate, +body[data-aos-delay="1650"] [data-aos].aos-animate { + transition-delay: 1.65s; +} +[data-aos][data-aos][data-aos-duration="1700"], +body[data-aos-duration="1700"] [data-aos] { + transition-duration: 1.7s; +} +[data-aos][data-aos][data-aos-delay="1700"], +body[data-aos-delay="1700"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1700"].aos-animate, +body[data-aos-delay="1700"] [data-aos].aos-animate { + transition-delay: 1.7s; +} +[data-aos][data-aos][data-aos-duration="1750"], +body[data-aos-duration="1750"] [data-aos] { + transition-duration: 1.75s; +} +[data-aos][data-aos][data-aos-delay="1750"], +body[data-aos-delay="1750"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1750"].aos-animate, +body[data-aos-delay="1750"] [data-aos].aos-animate { + transition-delay: 1.75s; +} +[data-aos][data-aos][data-aos-duration="1800"], +body[data-aos-duration="1800"] [data-aos] { + transition-duration: 1.8s; +} +[data-aos][data-aos][data-aos-delay="1800"], +body[data-aos-delay="1800"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1800"].aos-animate, +body[data-aos-delay="1800"] [data-aos].aos-animate { + transition-delay: 1.8s; +} +[data-aos][data-aos][data-aos-duration="1850"], +body[data-aos-duration="1850"] [data-aos] { + transition-duration: 1.85s; +} +[data-aos][data-aos][data-aos-delay="1850"], +body[data-aos-delay="1850"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1850"].aos-animate, +body[data-aos-delay="1850"] [data-aos].aos-animate { + transition-delay: 1.85s; +} +[data-aos][data-aos][data-aos-duration="1900"], +body[data-aos-duration="1900"] [data-aos] { + transition-duration: 1.9s; +} +[data-aos][data-aos][data-aos-delay="1900"], +body[data-aos-delay="1900"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1900"].aos-animate, +body[data-aos-delay="1900"] [data-aos].aos-animate { + transition-delay: 1.9s; +} +[data-aos][data-aos][data-aos-duration="1950"], +body[data-aos-duration="1950"] [data-aos] { + transition-duration: 1.95s; +} +[data-aos][data-aos][data-aos-delay="1950"], +body[data-aos-delay="1950"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="1950"].aos-animate, +body[data-aos-delay="1950"] [data-aos].aos-animate { + transition-delay: 1.95s; +} +[data-aos][data-aos][data-aos-duration="2000"], +body[data-aos-duration="2000"] [data-aos] { + transition-duration: 2s; +} +[data-aos][data-aos][data-aos-delay="2000"], +body[data-aos-delay="2000"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2000"].aos-animate, +body[data-aos-delay="2000"] [data-aos].aos-animate { + transition-delay: 2s; +} +[data-aos][data-aos][data-aos-duration="2050"], +body[data-aos-duration="2050"] [data-aos] { + transition-duration: 2.05s; +} +[data-aos][data-aos][data-aos-delay="2050"], +body[data-aos-delay="2050"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2050"].aos-animate, +body[data-aos-delay="2050"] [data-aos].aos-animate { + transition-delay: 2.05s; +} +[data-aos][data-aos][data-aos-duration="2100"], +body[data-aos-duration="2100"] [data-aos] { + transition-duration: 2.1s; +} +[data-aos][data-aos][data-aos-delay="2100"], +body[data-aos-delay="2100"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2100"].aos-animate, +body[data-aos-delay="2100"] [data-aos].aos-animate { + transition-delay: 2.1s; +} +[data-aos][data-aos][data-aos-duration="2150"], +body[data-aos-duration="2150"] [data-aos] { + transition-duration: 2.15s; +} +[data-aos][data-aos][data-aos-delay="2150"], +body[data-aos-delay="2150"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2150"].aos-animate, +body[data-aos-delay="2150"] [data-aos].aos-animate { + transition-delay: 2.15s; +} +[data-aos][data-aos][data-aos-duration="2200"], +body[data-aos-duration="2200"] [data-aos] { + transition-duration: 2.2s; +} +[data-aos][data-aos][data-aos-delay="2200"], +body[data-aos-delay="2200"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2200"].aos-animate, +body[data-aos-delay="2200"] [data-aos].aos-animate { + transition-delay: 2.2s; +} +[data-aos][data-aos][data-aos-duration="2250"], +body[data-aos-duration="2250"] [data-aos] { + transition-duration: 2.25s; +} +[data-aos][data-aos][data-aos-delay="2250"], +body[data-aos-delay="2250"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2250"].aos-animate, +body[data-aos-delay="2250"] [data-aos].aos-animate { + transition-delay: 2.25s; +} +[data-aos][data-aos][data-aos-duration="2300"], +body[data-aos-duration="2300"] [data-aos] { + transition-duration: 2.3s; +} +[data-aos][data-aos][data-aos-delay="2300"], +body[data-aos-delay="2300"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2300"].aos-animate, +body[data-aos-delay="2300"] [data-aos].aos-animate { + transition-delay: 2.3s; +} +[data-aos][data-aos][data-aos-duration="2350"], +body[data-aos-duration="2350"] [data-aos] { + transition-duration: 2.35s; +} +[data-aos][data-aos][data-aos-delay="2350"], +body[data-aos-delay="2350"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2350"].aos-animate, +body[data-aos-delay="2350"] [data-aos].aos-animate { + transition-delay: 2.35s; +} +[data-aos][data-aos][data-aos-duration="2400"], +body[data-aos-duration="2400"] [data-aos] { + transition-duration: 2.4s; +} +[data-aos][data-aos][data-aos-delay="2400"], +body[data-aos-delay="2400"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2400"].aos-animate, +body[data-aos-delay="2400"] [data-aos].aos-animate { + transition-delay: 2.4s; +} +[data-aos][data-aos][data-aos-duration="2450"], +body[data-aos-duration="2450"] [data-aos] { + transition-duration: 2.45s; +} +[data-aos][data-aos][data-aos-delay="2450"], +body[data-aos-delay="2450"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2450"].aos-animate, +body[data-aos-delay="2450"] [data-aos].aos-animate { + transition-delay: 2.45s; +} +[data-aos][data-aos][data-aos-duration="2500"], +body[data-aos-duration="2500"] [data-aos] { + transition-duration: 2.5s; +} +[data-aos][data-aos][data-aos-delay="2500"], +body[data-aos-delay="2500"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2500"].aos-animate, +body[data-aos-delay="2500"] [data-aos].aos-animate { + transition-delay: 2.5s; +} +[data-aos][data-aos][data-aos-duration="2550"], +body[data-aos-duration="2550"] [data-aos] { + transition-duration: 2.55s; +} +[data-aos][data-aos][data-aos-delay="2550"], +body[data-aos-delay="2550"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2550"].aos-animate, +body[data-aos-delay="2550"] [data-aos].aos-animate { + transition-delay: 2.55s; +} +[data-aos][data-aos][data-aos-duration="2600"], +body[data-aos-duration="2600"] [data-aos] { + transition-duration: 2.6s; +} +[data-aos][data-aos][data-aos-delay="2600"], +body[data-aos-delay="2600"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2600"].aos-animate, +body[data-aos-delay="2600"] [data-aos].aos-animate { + transition-delay: 2.6s; +} +[data-aos][data-aos][data-aos-duration="2650"], +body[data-aos-duration="2650"] [data-aos] { + transition-duration: 2.65s; +} +[data-aos][data-aos][data-aos-delay="2650"], +body[data-aos-delay="2650"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2650"].aos-animate, +body[data-aos-delay="2650"] [data-aos].aos-animate { + transition-delay: 2.65s; +} +[data-aos][data-aos][data-aos-duration="2700"], +body[data-aos-duration="2700"] [data-aos] { + transition-duration: 2.7s; +} +[data-aos][data-aos][data-aos-delay="2700"], +body[data-aos-delay="2700"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2700"].aos-animate, +body[data-aos-delay="2700"] [data-aos].aos-animate { + transition-delay: 2.7s; +} +[data-aos][data-aos][data-aos-duration="2750"], +body[data-aos-duration="2750"] [data-aos] { + transition-duration: 2.75s; +} +[data-aos][data-aos][data-aos-delay="2750"], +body[data-aos-delay="2750"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2750"].aos-animate, +body[data-aos-delay="2750"] [data-aos].aos-animate { + transition-delay: 2.75s; +} +[data-aos][data-aos][data-aos-duration="2800"], +body[data-aos-duration="2800"] [data-aos] { + transition-duration: 2.8s; +} +[data-aos][data-aos][data-aos-delay="2800"], +body[data-aos-delay="2800"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2800"].aos-animate, +body[data-aos-delay="2800"] [data-aos].aos-animate { + transition-delay: 2.8s; +} +[data-aos][data-aos][data-aos-duration="2850"], +body[data-aos-duration="2850"] [data-aos] { + transition-duration: 2.85s; +} +[data-aos][data-aos][data-aos-delay="2850"], +body[data-aos-delay="2850"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2850"].aos-animate, +body[data-aos-delay="2850"] [data-aos].aos-animate { + transition-delay: 2.85s; +} +[data-aos][data-aos][data-aos-duration="2900"], +body[data-aos-duration="2900"] [data-aos] { + transition-duration: 2.9s; +} +[data-aos][data-aos][data-aos-delay="2900"], +body[data-aos-delay="2900"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2900"].aos-animate, +body[data-aos-delay="2900"] [data-aos].aos-animate { + transition-delay: 2.9s; +} +[data-aos][data-aos][data-aos-duration="2950"], +body[data-aos-duration="2950"] [data-aos] { + transition-duration: 2.95s; +} +[data-aos][data-aos][data-aos-delay="2950"], +body[data-aos-delay="2950"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="2950"].aos-animate, +body[data-aos-delay="2950"] [data-aos].aos-animate { + transition-delay: 2.95s; +} +[data-aos][data-aos][data-aos-duration="3000"], +body[data-aos-duration="3000"] [data-aos] { + transition-duration: 3s; +} +[data-aos][data-aos][data-aos-delay="3000"], +body[data-aos-delay="3000"] [data-aos] { + transition-delay: 0; +} +[data-aos][data-aos][data-aos-delay="3000"].aos-animate, +body[data-aos-delay="3000"] [data-aos].aos-animate { + transition-delay: 3s; +} +[data-aos][data-aos][data-aos-easing="linear"], +body[data-aos-easing="linear"] [data-aos] { + transition-timing-function: cubic-bezier(0.25, 0.25, 0.75, 0.75); +} +[data-aos][data-aos][data-aos-easing="ease"], +body[data-aos-easing="ease"] [data-aos] { + transition-timing-function: ease; +} +[data-aos][data-aos][data-aos-easing="ease-in"], +body[data-aos-easing="ease-in"] [data-aos] { + transition-timing-function: ease-in; +} +[data-aos][data-aos][data-aos-easing="ease-out"], +body[data-aos-easing="ease-out"] [data-aos] { + transition-timing-function: ease-out; +} +[data-aos][data-aos][data-aos-easing="ease-in-out"], +body[data-aos-easing="ease-in-out"] [data-aos] { + transition-timing-function: ease-in-out; +} +[data-aos][data-aos][data-aos-easing="ease-in-back"], +body[data-aos-easing="ease-in-back"] [data-aos] { + transition-timing-function: cubic-bezier(0.6, -0.28, 0.735, 0.045); +} +[data-aos][data-aos][data-aos-easing="ease-out-back"], +body[data-aos-easing="ease-out-back"] [data-aos] { + transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275); +} +[data-aos][data-aos][data-aos-easing="ease-in-out-back"], +body[data-aos-easing="ease-in-out-back"] [data-aos] { + transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55); +} +[data-aos][data-aos][data-aos-easing="ease-in-sine"], +body[data-aos-easing="ease-in-sine"] [data-aos] { + transition-timing-function: cubic-bezier(0.47, 0, 0.745, 0.715); +} +[data-aos][data-aos][data-aos-easing="ease-out-sine"], +body[data-aos-easing="ease-out-sine"] [data-aos] { + transition-timing-function: cubic-bezier(0.39, 0.575, 0.565, 1); +} +[data-aos][data-aos][data-aos-easing="ease-in-out-sine"], +body[data-aos-easing="ease-in-out-sine"] [data-aos] { + transition-timing-function: cubic-bezier(0.445, 0.05, 0.55, 0.95); +} +[data-aos][data-aos][data-aos-easing="ease-in-quad"], +body[data-aos-easing="ease-in-quad"] [data-aos] { + transition-timing-function: cubic-bezier(0.55, 0.085, 0.68, 0.53); +} +[data-aos][data-aos][data-aos-easing="ease-out-quad"], +body[data-aos-easing="ease-out-quad"] [data-aos] { + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +[data-aos][data-aos][data-aos-easing="ease-in-out-quad"], +body[data-aos-easing="ease-in-out-quad"] [data-aos] { + transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955); +} +[data-aos][data-aos][data-aos-easing="ease-in-cubic"], +body[data-aos-easing="ease-in-cubic"] [data-aos] { + transition-timing-function: cubic-bezier(0.55, 0.085, 0.68, 0.53); +} +[data-aos][data-aos][data-aos-easing="ease-out-cubic"], +body[data-aos-easing="ease-out-cubic"] [data-aos] { + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +[data-aos][data-aos][data-aos-easing="ease-in-out-cubic"], +body[data-aos-easing="ease-in-out-cubic"] [data-aos] { + transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955); +} +[data-aos][data-aos][data-aos-easing="ease-in-quart"], +body[data-aos-easing="ease-in-quart"] [data-aos] { + transition-timing-function: cubic-bezier(0.55, 0.085, 0.68, 0.53); +} +[data-aos][data-aos][data-aos-easing="ease-out-quart"], +body[data-aos-easing="ease-out-quart"] [data-aos] { + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +[data-aos][data-aos][data-aos-easing="ease-in-out-quart"], +body[data-aos-easing="ease-in-out-quart"] [data-aos] { + transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955); +} +[data-aos^="fade"][data-aos^="fade"] { + opacity: 0; + transition-property: opacity, transform; +} +[data-aos^="fade"][data-aos^="fade"].aos-animate { + opacity: 1; + transform: translateZ(0); +} +[data-aos="fade-up"] { + transform: translate3d(0, 20px, 0); +} +[data-aos="fade-down"] { + transform: translate3d(0, -20px, 0); +} +[data-aos="fade-right"] { + transform: translate3d(-20px, 0, 0); +} +[data-aos="fade-left"] { + transform: translate3d(20px, 0, 0); +} +[data-aos="fade-up-right"] { + transform: translate3d(-20px, 20px, 0); +} +[data-aos="fade-up-left"] { + transform: translate3d(20px, 20px, 0); +} +[data-aos="fade-down-right"] { + transform: translate3d(-20px, -20px, 0); +} +[data-aos="fade-down-left"] { + transform: translate3d(20px, -20px, 0); +} +[data-aos^="slide"][data-aos^="slide"] { + transition-property: transform; +} +[data-aos^="slide"][data-aos^="slide"].aos-animate { + transform: translateZ(0); +} +[data-aos="slide-up"] { + transform: translate3d(0, 100%, 0); +} +[data-aos="slide-down"] { + transform: translate3d(0, -100%, 0); +} +[data-aos="slide-right"] { + transform: translate3d(-100%, 0, 0); +} +[data-aos="slide-left"] { + transform: translate3d(100%, 0, 0); +} +@charset "UTF-8"; +/*! + * Bootstrap v5.3.2 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root, +[data-bs-theme="light"] { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #191f27; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #eee; + --bs-dark: #222; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 238, 238, 238; + --bs-dark-rgb: 34, 34, 34; + --bs-primary-text-emphasis: #052c65; + --bs-secondary-text-emphasis: #2b2f32; + --bs-success-text-emphasis: #0a3622; + --bs-info-text-emphasis: #055160; + --bs-warning-text-emphasis: #664d03; + --bs-danger-text-emphasis: #58151c; + --bs-light-text-emphasis: #495057; + --bs-dark-text-emphasis: #495057; + --bs-primary-bg-subtle: #cfe2ff; + --bs-secondary-bg-subtle: #e2e3e5; + --bs-success-bg-subtle: #d1e7dd; + --bs-info-bg-subtle: #cff4fc; + --bs-warning-bg-subtle: #fff3cd; + --bs-danger-bg-subtle: #f8d7da; + --bs-light-bg-subtle: #fcfcfd; + --bs-dark-bg-subtle: #ced4da; + --bs-primary-border-subtle: #9ec5fe; + --bs-secondary-border-subtle: #c4c8cb; + --bs-success-border-subtle: #a3cfbb; + --bs-info-border-subtle: #9eeaf9; + --bs-warning-border-subtle: #ffe69c; + --bs-danger-border-subtle: #f1aeb5; + --bs-light-border-subtle: #e9ecef; + --bs-dark-border-subtle: #adb5bd; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 25, 31, 39; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg: #0e1015; + --bs-body-bg-rgb: 14, 16, 21; + --bs-emphasis-color: #191f27; + --bs-emphasis-color-rgb: 25, 31, 39; + --bs-secondary-color: rgba(33, 37, 41, 0.75); + --bs-secondary-color-rgb: 33, 37, 41; + --bs-secondary-bg: #e9ecef; + --bs-secondary-bg-rgb: 233, 236, 239; + --bs-tertiary-color: rgba(33, 37, 41, 0.5); + --bs-tertiary-color-rgb: 33, 37, 41; + --bs-tertiary-bg: #f8f9fa; + --bs-tertiary-bg-rgb: 248, 249, 250; + --bs-heading-color: inherit; + --bs-link-color: #0d6efd; + --bs-link-color-rgb: 13, 110, 253; + --bs-link-decoration: underline; + --bs-link-hover-color: #0a58ca; + --bs-link-hover-color-rgb: 10, 88, 202; + --bs-code-color: #d63384; + --bs-highlight-color: #212529; + --bs-highlight-bg: #fff3cd; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: rgba(24, 176, 162, 0.15); + --bs-border-color-translucent: rgba(25, 31, 39, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-xxl: 2rem; + --bs-border-radius-2xl: var(--bs-border-radius-xxl); + --bs-border-radius-pill: 50rem; + --bs-box-shadow: 0 0.5rem 1rem rgba(25, 31, 39, 0.15); + --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(25, 31, 39, 0.075); + --bs-box-shadow-lg: 0 1rem 3rem rgba(25, 31, 39, 0.175); + --bs-box-shadow-inset: inset 0 1px 2px rgba(25, 31, 39, 0.075); + --bs-focus-ring-width: 0.25rem; + --bs-focus-ring-opacity: 0.25; + --bs-focus-ring-color: rgba(13, 110, 253, 0.25); + --bs-form-valid-color: #198754; + --bs-form-valid-border-color: #198754; + --bs-form-invalid-color: #dc3545; + --bs-form-invalid-border-color: #dc3545; } + +[data-bs-theme="dark"] { + color-scheme: dark; + --bs-body-color: #dee2e6; + --bs-body-color-rgb: 222, 226, 230; + --bs-body-bg: #212529; + --bs-body-bg-rgb: 33, 37, 41; + --bs-emphasis-color: #fff; + --bs-emphasis-color-rgb: 255, 255, 255; + --bs-secondary-color: rgba(222, 226, 230, 0.75); + --bs-secondary-color-rgb: 222, 226, 230; + --bs-secondary-bg: #343a40; + --bs-secondary-bg-rgb: 52, 58, 64; + --bs-tertiary-color: rgba(222, 226, 230, 0.5); + --bs-tertiary-color-rgb: 222, 226, 230; + --bs-tertiary-bg: #2b3035; + --bs-tertiary-bg-rgb: 43, 48, 53; + --bs-primary-text-emphasis: #6ea8fe; + --bs-secondary-text-emphasis: #a7acb1; + --bs-success-text-emphasis: #75b798; + --bs-info-text-emphasis: #6edff6; + --bs-warning-text-emphasis: #ffda6a; + --bs-danger-text-emphasis: #ea868f; + --bs-light-text-emphasis: #f8f9fa; + --bs-dark-text-emphasis: #dee2e6; + --bs-primary-bg-subtle: #031633; + --bs-secondary-bg-subtle: #161719; + --bs-success-bg-subtle: #051b11; + --bs-info-bg-subtle: #032830; + --bs-warning-bg-subtle: #332701; + --bs-danger-bg-subtle: #2c0b0e; + --bs-light-bg-subtle: #343a40; + --bs-dark-bg-subtle: #272d34; + --bs-primary-border-subtle: #084298; + --bs-secondary-border-subtle: #41464b; + --bs-success-border-subtle: #0f5132; + --bs-info-border-subtle: #087990; + --bs-warning-border-subtle: #997404; + --bs-danger-border-subtle: #842029; + --bs-light-border-subtle: #495057; + --bs-dark-border-subtle: #343a40; + --bs-heading-color: inherit; + --bs-link-color: #6ea8fe; + --bs-link-hover-color: #8bb9fe; + --bs-link-color-rgb: 110, 168, 254; + --bs-link-hover-color-rgb: 139, 185, 254; + --bs-code-color: #e685b5; + --bs-highlight-color: #dee2e6; + --bs-highlight-bg: #664d03; + --bs-border-color: #495057; + --bs-border-color-translucent: rgba(255, 255, 255, 0.15); + --bs-form-valid-color: #75b798; + --bs-form-valid-border-color: #75b798; + --bs-form-invalid-color: #ea868f; + --bs-form-invalid-border-color: #ea868f; } + +*, +*::before, +*::after { + box-sizing: border-box; } + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; } } + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(25, 31, 39, 0); } + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: var(--bs-border-width) solid; + opacity: 0.25; } + + h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + color: var(--bs-heading-color); } + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); } + @media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; } } +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); } + @media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; } } +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); } + @media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; } } +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); } + @media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; } } +h5, .h5 { + font-size: 1.25rem; } + +p { + margin-top: 0; + margin-bottom: 1rem; } + +abbr[title] { + text-decoration: underline dotted; + cursor: help; + text-decoration-skip-ink: none; } + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; } + +ol, +ul { + padding-left: 2rem; } + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; } + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; } + +dt { + font-weight: 700; } + +dd { + margin-bottom: .5rem; + margin-left: 0; } + +blockquote { + margin: 0 0 1rem; } + +b, +strong { + font-weight: bolder; } + +small, .small { + font-size: 0.875em; } + +mark, .mark { + padding: 0.1875em; + color: var(--bs-highlight-color); + background-color: var(--bs-highlight-bg); } + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; } + +sub { + bottom: -.25em; } + +sup { + top: -.5em; } + +a { + color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); + text-decoration: underline; } + a:hover { + --bs-link-color-rgb: var(--bs-link-hover-color-rgb); } + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; } + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; } + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; } + pre code { + font-size: inherit; + color: inherit; + word-break: normal; } + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; } + a > code { + color: inherit; } + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; } + kbd kbd { + padding: 0; + font-size: 1em; } + +figure { + margin: 0 0 1rem; } + +img, +svg { + vertical-align: middle; } + +table { + caption-side: bottom; + border-collapse: collapse; } + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-secondary-color); + text-align: left; } + +th { + text-align: inherit; + text-align: -webkit-match-parent; } + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; } + +label { + display: inline-block; } + +button { + border-radius: 0; } + +button:focus:not(:focus-visible) { + outline: 0; } + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; } + +button, +select { + text-transform: none; } + +[role="button"] { + cursor: pointer; } + +select { + word-wrap: normal; } + select:disabled { + opacity: 1; } + +[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator { + display: none !important; } + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } + button:not(:disabled), + [type="button"]:not(:disabled), + [type="reset"]:not(:disabled), + [type="submit"]:not(:disabled) { + cursor: pointer; } + +::-moz-focus-inner { + padding: 0; + border-style: none; } + +textarea { + resize: vertical; } + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; } + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; } + @media (min-width: 1200px) { + legend { + font-size: 1.5rem; } } + legend + * { + clear: left; } + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; } + +::-webkit-inner-spin-button { + height: auto; } + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; } + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; } + +::-webkit-color-swatch-wrapper { + padding: 0; } + +::file-selector-button { + font: inherit; + -webkit-appearance: button; } + +output { + display: inline-block; } + +iframe { + border: 0; } + +summary { + display: list-item; + cursor: pointer; } + +progress { + vertical-align: baseline; } + +[hidden] { + display: none !important; } + +.lead { + font-size: 1.25rem; + font-weight: 300; } + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-1 { + font-size: 5rem; } } +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; } } +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-3 { + font-size: 4rem; } } +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; } } +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-5 { + font-size: 3rem; } } +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; } + @media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; } } +.list-unstyled { + padding-left: 0; + list-style: none; } + +.list-inline { + padding-left: 0; + list-style: none; } + +.list-inline-item { + display: inline-block; } + .list-inline-item:not(:last-child) { + margin-right: 0.5rem; } + +.initialism { + font-size: 0.875em; + text-transform: uppercase; } + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; } + .blockquote > :last-child { + margin-bottom: 0; } + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; } + .blockquote-footer::before { + content: "\2014\00A0"; } + +.img-fluid { + max-width: 100%; + height: auto; } + +.img-thumbnail { + padding: 0.25rem; + background-color: var(--bs-body-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + max-width: 100%; + height: auto; } + +.figure { + display: inline-block; } + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; } + +.figure-caption { + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-right: auto; + margin-left: auto; } + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; } } + +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; } } + +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; } } + +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; } } + +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; } } + +:root { + --bs-breakpoint-xs: 0; + --bs-breakpoint-sm: 576px; + --bs-breakpoint-md: 768px; + --bs-breakpoint-lg: 992px; + --bs-breakpoint-xl: 1200px; + --bs-breakpoint-xxl: 1400px; } + +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-.5 * var(--bs-gutter-x)); + margin-left: calc(-.5 * var(--bs-gutter-x)); } + .row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * .5); + padding-left: calc(var(--bs-gutter-x) * .5); + margin-top: var(--bs-gutter-y); } + +.col { + flex: 1 0 0%; } + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; } + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; } + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; } + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; } + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; } + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + +.col-auto { + flex: 0 0 auto; + width: auto; } + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; } + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; } + +.col-3 { + flex: 0 0 auto; + width: 25%; } + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; } + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; } + +.col-6 { + flex: 0 0 auto; + width: 50%; } + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; } + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; } + +.col-9 { + flex: 0 0 auto; + width: 75%; } + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; } + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; } + +.col-12 { + flex: 0 0 auto; + width: 100%; } + +.offset-1 { + margin-left: 8.33333333%; } + +.offset-2 { + margin-left: 16.66666667%; } + +.offset-3 { + margin-left: 25%; } + +.offset-4 { + margin-left: 33.33333333%; } + +.offset-5 { + margin-left: 41.66666667%; } + +.offset-6 { + margin-left: 50%; } + +.offset-7 { + margin-left: 58.33333333%; } + +.offset-8 { + margin-left: 66.66666667%; } + +.offset-9 { + margin-left: 75%; } + +.offset-10 { + margin-left: 83.33333333%; } + +.offset-11 { + margin-left: 91.66666667%; } + + +.gx-0 { + --bs-gutter-x: 0; } + + +.gx-1 { + --bs-gutter-x: 0.25rem; } + + +.gx-2 { + --bs-gutter-x: 0.5rem; } + + +.gx-3 { + --bs-gutter-x: 1rem; } + + +.gx-4 { + --bs-gutter-x: 1.5rem; } + + +.gy-4 { + --bs-gutter-y: 1.5rem; } + + +.gx-5 { + --bs-gutter-x: 3rem; } + + +.gy-5 { + --bs-gutter-y: 3rem; } + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-sm-auto { + flex: 0 0 auto; + width: auto; } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; } + .offset-sm-0 { + margin-left: 0; } + .offset-sm-1 { + margin-left: 8.33333333%; } + .offset-sm-2 { + margin-left: 16.66666667%; } + .offset-sm-3 { + margin-left: 25%; } + .offset-sm-4 { + margin-left: 33.33333333%; } + .offset-sm-5 { + margin-left: 41.66666667%; } + .offset-sm-6 { + margin-left: 50%; } + .offset-sm-7 { + margin-left: 58.33333333%; } + .offset-sm-8 { + margin-left: 66.66666667%; } + .offset-sm-9 { + margin-left: 75%; } + .offset-sm-10 { + margin-left: 83.33333333%; } + .offset-sm-11 { + margin-left: 91.66666667%; } + .g-sm-0, + .gx-sm-0 { + --bs-gutter-x: 0; } + .g-sm-0, + .gy-sm-0 { + --bs-gutter-y: 0; } + .g-sm-1, + .gx-sm-1 { + --bs-gutter-x: 0.25rem; } + .g-sm-1, + .gy-sm-1 { + --bs-gutter-y: 0.25rem; } + .g-sm-2, + .gx-sm-2 { + --bs-gutter-x: 0.5rem; } + .g-sm-2, + .gy-sm-2 { + --bs-gutter-y: 0.5rem; } + .g-sm-3, + .gx-sm-3 { + --bs-gutter-x: 1rem; } + .g-sm-3, + .gy-sm-3 { + --bs-gutter-y: 1rem; } + .g-sm-4, + .gx-sm-4 { + --bs-gutter-x: 1.5rem; } + .g-sm-4, + .gy-sm-4 { + --bs-gutter-y: 1.5rem; } + .g-sm-5, + .gx-sm-5 { + --bs-gutter-x: 3rem; } + .g-sm-5, + .gy-sm-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-md-auto { + flex: 0 0 auto; + width: auto; } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-md-3 { + flex: 0 0 auto; + width: 25%; } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-md-6 { + flex: 0 0 auto; + width: 50%; } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-md-9 { + flex: 0 0 auto; + width: 75%; } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-md-12 { + flex: 0 0 auto; + width: 100%; } + .offset-md-0 { + margin-left: 0; } + .offset-md-1 { + margin-left: 8.33333333%; } + .offset-md-2 { + margin-left: 16.66666667%; } + .offset-md-3 { + margin-left: 25%; } + .offset-md-4 { + margin-left: 33.33333333%; } + .offset-md-5 { + margin-left: 41.66666667%; } + .offset-md-6 { + margin-left: 50%; } + .offset-md-7 { + margin-left: 58.33333333%; } + .offset-md-8 { + margin-left: 66.66666667%; } + .offset-md-9 { + margin-left: 75%; } + .offset-md-10 { + margin-left: 83.33333333%; } + .offset-md-11 { + margin-left: 91.66666667%; } + .g-md-0, + .gx-md-0 { + --bs-gutter-x: 0; } + .g-md-0, + .gy-md-0 { + --bs-gutter-y: 0; } + .g-md-1, + .gx-md-1 { + --bs-gutter-x: 0.25rem; } + .g-md-1, + .gy-md-1 { + --bs-gutter-y: 0.25rem; } + .g-md-2, + .gx-md-2 { + --bs-gutter-x: 0.5rem; } + .g-md-2, + .gy-md-2 { + --bs-gutter-y: 0.5rem; } + .g-md-3, + .gx-md-3 { + --bs-gutter-x: 1rem; } + .g-md-3, + .gy-md-3 { + --bs-gutter-y: 1rem; } + .g-md-4, + .gx-md-4 { + --bs-gutter-x: 1.5rem; } + .g-md-4, + .gy-md-4 { + --bs-gutter-y: 1.5rem; } + .g-md-5, + .gx-md-5 { + --bs-gutter-x: 3rem; } + .g-md-5, + .gy-md-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-lg-auto { + flex: 0 0 auto; + width: auto; } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; } + .offset-lg-0 { + margin-left: 0; } + .offset-lg-1 { + margin-left: 8.33333333%; } + .offset-lg-2 { + margin-left: 16.66666667%; } + .offset-lg-3 { + margin-left: 25%; } + .offset-lg-4 { + margin-left: 33.33333333%; } + .offset-lg-5 { + margin-left: 41.66666667%; } + .offset-lg-6 { + margin-left: 50%; } + .offset-lg-7 { + margin-left: 58.33333333%; } + .offset-lg-8 { + margin-left: 66.66666667%; } + .offset-lg-9 { + margin-left: 75%; } + .offset-lg-10 { + margin-left: 83.33333333%; } + .offset-lg-11 { + margin-left: 91.66666667%; } + .g-lg-0, + .gx-lg-0 { + --bs-gutter-x: 0; } + .g-lg-0, + .gy-lg-0 { + --bs-gutter-y: 0; } + .g-lg-1, + .gx-lg-1 { + --bs-gutter-x: 0.25rem; } + .g-lg-1, + .gy-lg-1 { + --bs-gutter-y: 0.25rem; } + .g-lg-2, + .gx-lg-2 { + --bs-gutter-x: 0.5rem; } + .g-lg-2, + .gy-lg-2 { + --bs-gutter-y: 0.5rem; } + .g-lg-3, + .gx-lg-3 { + --bs-gutter-x: 1rem; } + .g-lg-3, + .gy-lg-3 { + --bs-gutter-y: 1rem; } + .g-lg-4, + .gx-lg-4 { + --bs-gutter-x: 1.5rem; } + .g-lg-4, + .gy-lg-4 { + --bs-gutter-y: 1.5rem; } + .g-lg-5, + .gx-lg-5 { + --bs-gutter-x: 3rem; } + .g-lg-5, + .gy-lg-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xl-auto { + flex: 0 0 auto; + width: auto; } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xl-0 { + margin-left: 0; } + .offset-xl-1 { + margin-left: 8.33333333%; } + .offset-xl-2 { + margin-left: 16.66666667%; } + .offset-xl-3 { + margin-left: 25%; } + .offset-xl-4 { + margin-left: 33.33333333%; } + .offset-xl-5 { + margin-left: 41.66666667%; } + .offset-xl-6 { + margin-left: 50%; } + .offset-xl-7 { + margin-left: 58.33333333%; } + .offset-xl-8 { + margin-left: 66.66666667%; } + .offset-xl-9 { + margin-left: 75%; } + .offset-xl-10 { + margin-left: 83.33333333%; } + .offset-xl-11 { + margin-left: 91.66666667%; } + .g-xl-0, + .gx-xl-0 { + --bs-gutter-x: 0; } + .g-xl-0, + .gy-xl-0 { + --bs-gutter-y: 0; } + .g-xl-1, + .gx-xl-1 { + --bs-gutter-x: 0.25rem; } + .g-xl-1, + .gy-xl-1 { + --bs-gutter-y: 0.25rem; } + .g-xl-2, + .gx-xl-2 { + --bs-gutter-x: 0.5rem; } + .g-xl-2, + .gy-xl-2 { + --bs-gutter-y: 0.5rem; } + .g-xl-3, + .gx-xl-3 { + --bs-gutter-x: 1rem; } + .g-xl-3, + .gy-xl-3 { + --bs-gutter-y: 1rem; } + .g-xl-4, + .gx-xl-4 { + --bs-gutter-x: 1.5rem; } + .g-xl-4, + .gy-xl-4 { + --bs-gutter-y: 1.5rem; } + .g-xl-5, + .gx-xl-5 { + --bs-gutter-x: 3rem; } + .g-xl-5, + .gy-xl-5 { + --bs-gutter-y: 3rem; } } + +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.33333333%; } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; } + .offset-xxl-0 { + margin-left: 0; } + .offset-xxl-1 { + margin-left: 8.33333333%; } + .offset-xxl-2 { + margin-left: 16.66666667%; } + .offset-xxl-3 { + margin-left: 25%; } + .offset-xxl-4 { + margin-left: 33.33333333%; } + .offset-xxl-5 { + margin-left: 41.66666667%; } + .offset-xxl-6 { + margin-left: 50%; } + .offset-xxl-7 { + margin-left: 58.33333333%; } + .offset-xxl-8 { + margin-left: 66.66666667%; } + .offset-xxl-9 { + margin-left: 75%; } + .offset-xxl-10 { + margin-left: 83.33333333%; } + .offset-xxl-11 { + margin-left: 91.66666667%; } + .g-xxl-0, + .gx-xxl-0 { + --bs-gutter-x: 0; } + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; } + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; } + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; } + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; } + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; } + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; } + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; } + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; } + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; } + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; } + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; } } + +.table { + --bs-table-color-type: initial; + --bs-table-bg-type: initial; + --bs-table-color-state: initial; + --bs-table-bg-state: initial; + --bs-table-color: var(--bs-emphasis-color); + --bs-table-bg: var(--bs-body-bg); + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-emphasis-color); + --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05); + --bs-table-active-color: var(--bs-emphasis-color); + --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1); + --bs-table-hover-color: var(--bs-emphasis-color); + --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075); + width: 100%; + margin-bottom: 1rem; + vertical-align: top; + border-color: var(--bs-table-border-color); } + .table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color))); + background-color: var(--bs-table-bg); + border-bottom-width: var(--bs-border-width); + box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg))); } + .table > tbody { + vertical-align: inherit; } + .table > thead { + vertical-align: bottom; } + +.table-group-divider { + border-top: calc(var(--bs-border-width) * 2) solid currentcolor; } + +.caption-top { + caption-side: top; } + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; } + +.table-bordered > :not(caption) > * { + border-width: var(--bs-border-width) 0; } + .table-bordered > :not(caption) > * > * { + border-width: 0 var(--bs-border-width); } + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; } + +.table-borderless > :not(:first-child) { + border-top-width: 0; } + +.table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); } + +.table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); } + +.table-active { + --bs-table-color-state: var(--bs-table-active-color); + --bs-table-bg-state: var(--bs-table-active-bg); } + +.table-hover > tbody > tr:hover > * { + --bs-table-color-state: var(--bs-table-hover-color); + --bs-table-bg-state: var(--bs-table-hover-bg); } + +.table-primary { + --bs-table-color: #191f27; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #abbbd4; + --bs-table-striped-bg: #c6d8f4; + --bs-table-striped-color: #191f27; + --bs-table-active-bg: #bdcfe9; + --bs-table-active-color: #191f27; + --bs-table-hover-bg: #c1d3ef; + --bs-table-hover-color: #191f27; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-secondary { + --bs-table-color: #191f27; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #babcbf; + --bs-table-striped-bg: #d8d9dc; + --bs-table-striped-color: #191f27; + --bs-table-active-bg: #cecfd2; + --bs-table-active-color: #191f27; + --bs-table-hover-bg: #d3d4d7; + --bs-table-hover-color: #191f27; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-success { + --bs-table-color: #191f27; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #acbfb9; + --bs-table-striped-bg: #c8ddd4; + --bs-table-striped-color: #191f27; + --bs-table-active-bg: #bfd3cb; + --bs-table-active-color: #191f27; + --bs-table-hover-bg: #c3d8cf; + --bs-table-hover-color: #191f27; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-info { + --bs-table-color: #191f27; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #abc9d1; + --bs-table-striped-bg: #c6e9f1; + --bs-table-striped-color: #191f27; + --bs-table-active-bg: #bddfe7; + --bs-table-active-color: #191f27; + --bs-table-hover-bg: #c1e4ec; + --bs-table-hover-color: #191f27; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-warning { + --bs-table-color: #191f27; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #d1c9ac; + --bs-table-striped-bg: #f4e8c5; + --bs-table-striped-color: #191f27; + --bs-table-active-bg: #e8debc; + --bs-table-active-color: #191f27; + --bs-table-hover-bg: #eee3c1; + --bs-table-hover-color: #191f27; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-danger { + --bs-table-color: #191f27; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #cbb2b6; + --bs-table-striped-bg: #edced1; + --bs-table-striped-color: #191f27; + --bs-table-active-bg: #e2c5c8; + --bs-table-active-color: #191f27; + --bs-table-hover-bg: #e7c9cd; + --bs-table-hover-color: #191f27; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-light { + --bs-table-color: #191f27; + --bs-table-bg: #eee; + --bs-table-border-color: #c3c5c6; + --bs-table-striped-bg: #e3e4e4; + --bs-table-striped-color: #191f27; + --bs-table-active-bg: #d9d9da; + --bs-table-active-color: #191f27; + --bs-table-hover-bg: #dededf; + --bs-table-hover-color: #191f27; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #222; + --bs-table-border-color: #4e4e4e; + --bs-table-striped-bg: #2d2d2d; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #383838; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #333333; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); } + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; } } + +.form-label { + margin-bottom: 0.5rem; } + +.col-form-label { + padding-top: calc(0.375rem + var(--bs-border-width)); + padding-bottom: calc(0.375rem + var(--bs-border-width)); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; } + +.col-form-label-lg { + padding-top: calc(0.5rem + var(--bs-border-width)); + padding-bottom: calc(0.5rem + var(--bs-border-width)); + font-size: 1.25rem; } + +.col-form-label-sm { + padding-top: calc(0.25rem + var(--bs-border-width)); + padding-bottom: calc(0.25rem + var(--bs-border-width)); + font-size: 0.875rem; } + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-secondary-color); } + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-clip: padding-box; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; } } + .form-control[type="file"] { + overflow: hidden; } + .form-control[type="file"]:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control:focus { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-control::-webkit-date-and-time-value { + min-width: 85px; + height: 1.5em; + margin: 0; } + .form-control::-webkit-datetime-edit { + display: block; + padding: 0; } + .form-control::placeholder { + color: var(--bs-secondary-color); + opacity: 1; } + .form-control:disabled { + background-color: var(--bs-secondary-bg); + opacity: 1; } + .form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + margin-inline-end: 0.75rem; + color: var(--bs-body-color); + background-color: var(--bs-tertiary-bg); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: var(--bs-border-width); + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button { + transition: none; } } + .form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--bs-secondary-bg); } + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: var(--bs-body-color); + background-color: transparent; + border: solid transparent; + border-width: var(--bs-border-width) 0; } + .form-control-plaintext:focus { + outline: 0; } + .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; } + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + .form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + margin-inline-end: 0.5rem; } + +.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + .form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + margin-inline-end: 1rem; } + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); } + +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); } + +.form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); + padding: 0.375rem; } + .form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; } + .form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); } + .form-control-color::-webkit-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); } + .form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); } + .form-control-color.form-control-lg { + height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); } + +.form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + appearance: none; + background-color: var(--bs-body-bg); + background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; } } + .form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; } + .form-select:disabled { + background-color: var(--bs-secondary-bg); } + .form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--bs-body-color); } + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +[data-bs-theme="dark"] .form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); } + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; } + .form-check .form-check-input { + float: left; + margin-left: -1.5em; } + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; } + .form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; } + +.form-check-input { + --bs-form-check-bg: var(--bs-body-bg); + flex-shrink: 0; + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + appearance: none; + background-color: var(--bs-form-check-bg); + background-image: var(--bs-form-check-bg-image); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--bs-border-width) solid var(--bs-border-color); + print-color-adjust: exact; } + .form-check-input[type="checkbox"] { + border-radius: 0.25em; } + .form-check-input[type="radio"] { + border-radius: 50%; } + .form-check-input:active { + filter: brightness(90%); } + .form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; } + .form-check-input:checked[type="checkbox"] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); } + .form-check-input:checked[type="radio"] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); } + .form-check-input[type="checkbox"]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); } + .form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; } + .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; } + +.form-switch { + padding-left: 2.5em; } + .form-switch .form-check-input { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%2825, 31, 39, 0.25%29'/%3e%3c/svg%3e"); + width: 2em; + margin-left: -2.5em; + background-image: var(--bs-form-switch-bg); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; } } + .form-switch .form-check-input:focus { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); } + .form-switch .form-check-input:checked { + background-position: right center; + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } + .form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; } + .form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; } + +.form-check-inline { + display: inline-block; + margin-right: 1rem; } + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; } + .btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; } + +[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus) { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e"); } + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + appearance: none; + background-color: transparent; } + .form-range:focus { + outline: 0; } + .form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #0e1015, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #0e1015, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .form-range::-moz-focus-outer { + border: 0; } + .form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + transition: none; } } + .form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; } + .form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; } + .form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + transition: none; } } + .form-range::-moz-range-thumb:active { + background-color: #b6d4fe; } + .form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; } + .form-range:disabled { + pointer-events: none; } + .form-range:disabled::-webkit-slider-thumb { + background-color: var(--bs-secondary-color); } + .form-range:disabled::-moz-range-thumb { + background-color: var(--bs-secondary-color); } + +.form-floating { + position: relative; } + .form-floating > .form-control, + .form-floating > .form-control-plaintext, + .form-floating > .form-select { + height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + min-height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + line-height: 1.25; } + .form-floating > label { + position: absolute; + top: 0; + left: 0; + z-index: 2; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: var(--bs-border-width) solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; } } + .form-floating > .form-control, + .form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; } + .form-floating > .form-control::placeholder, + .form-floating > .form-control-plaintext::placeholder { + color: transparent; } + .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), + .form-floating > .form-control-plaintext:focus, + .form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:-webkit-autofill, + .form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; } + .form-floating > .form-control:focus ~ label, + .form-floating > .form-control:not(:placeholder-shown) ~ label, + .form-floating > .form-control-plaintext ~ label, + .form-floating > .form-select ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control:focus ~ label::after, + .form-floating > .form-control:not(:placeholder-shown) ~ label::after, + .form-floating > .form-control-plaintext ~ label::after, + .form-floating > .form-select ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--bs-body-bg); + border-radius: var(--bs-border-radius); } + .form-floating > .form-control:-webkit-autofill ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } + .form-floating > .form-control-plaintext ~ label { + border-width: var(--bs-border-width) 0; } + .form-floating > :disabled ~ label, + .form-floating > .form-control:disabled ~ label { + color: #6c757d; } + .form-floating > :disabled ~ label::after, + .form-floating > .form-control:disabled ~ label::after { + background-color: var(--bs-secondary-bg); } + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; } + .input-group > .form-control, + .input-group > .form-select, + .input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; } + .input-group > .form-control:focus, + .input-group > .form-select:focus, + .input-group > .form-floating:focus-within { + z-index: 5; } + .input-group .btn { + position: relative; + z-index: 2; } + .input-group .btn:focus { + z-index: 5; } + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-tertiary-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); } + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); } + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); } + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; } + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3), +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4), +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-control, +.input-group.has-validation > .form-floating:nth-last-child(n + 3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: calc(var(--bs-border-width) * -1); + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.input-group > .form-floating:not(:first-child) > .form-control, +.input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-valid-color); } + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-success); + border-radius: var(--bs-border-radius); } + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; } + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: var(--bs-form-valid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: var(--bs-form-valid-border-color); } + .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: var(--bs-form-valid-color); } + .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); } + .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: var(--bs-form-valid-color); } + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid, .was-validated .input-group > .form-select:not(:focus):valid, +.input-group > .form-select:not(:focus).is-valid, .was-validated .input-group > .form-floating:not(:focus-within):valid, +.input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; } + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-invalid-color); } + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-danger); + border-radius: var(--bs-border-radius); } + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: var(--bs-form-invalid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } + .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); } + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: var(--bs-form-invalid-border-color); } + .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: var(--bs-form-invalid-color); } + .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); } + .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: var(--bs-form-invalid-color); } + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: .5em; } + +.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid, .was-validated .input-group > .form-select:not(:focus):invalid, +.input-group > .form-select:not(:focus).is-invalid, .was-validated .input-group > .form-floating:not(:focus-within):invalid, +.input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; } + +.btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-family: ; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: var(--bs-body-color); + --bs-btn-bg: transparent; + --bs-btn-border-width: var(--bs-border-width); + --bs-btn-border-color: transparent; + --bs-btn-border-radius: var(--bs-border-radius); + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(25, 31, 39, 0.075); + --bs-btn-disabled-opacity: 0.65; + --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .btn { + transition: none; } } + .btn:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); } + .btn-check + .btn:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); } + .btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); } + .btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); } + .btn:disabled, .btn.disabled, fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); } + +.btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; } + +.btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; } + +.btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; } + +.btn-info { + --bs-btn-color: #191f27; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #191f27; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 15, 176, 210; + --bs-btn-active-color: #191f27; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #191f27; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; } + +.btn-warning { + --bs-btn-color: #191f27; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #191f27; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 221, 169, 12; + --bs-btn-active-color: #191f27; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #191f27; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; } + +.btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; } + +.btn-light { + --bs-btn-color: #191f27; + --bs-btn-bg: #eee; + --bs-btn-border-color: #eee; + --bs-btn-hover-color: #191f27; + --bs-btn-hover-bg: #cacaca; + --bs-btn-hover-border-color: #bebebe; + --bs-btn-focus-shadow-rgb: 206, 207, 208; + --bs-btn-active-color: #191f27; + --bs-btn-active-bg: #bebebe; + --bs-btn-active-border-color: #b3b3b3; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #191f27; + --bs-btn-disabled-bg: #eee; + --bs-btn-disabled-border-color: #eee; } + +.btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #222; + --bs-btn-border-color: #222; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #434343; + --bs-btn-hover-border-color: #383838; + --bs-btn-focus-shadow-rgb: 67, 67, 67; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4e4e4e; + --bs-btn-active-border-color: #383838; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #222; + --bs-btn-disabled-border-color: #222; } + +.btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; } + +.btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; } + +.btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; } + +.btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #191f27; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #191f27; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; } + +.btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #191f27; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #191f27; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; } + +.btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; } + +.btn-outline-light { + --bs-btn-color: #eee; + --bs-btn-border-color: #eee; + --bs-btn-hover-color: #191f27; + --bs-btn-hover-bg: #eee; + --bs-btn-hover-border-color: #eee; + --bs-btn-focus-shadow-rgb: 238, 238, 238; + --bs-btn-active-color: #191f27; + --bs-btn-active-bg: #eee; + --bs-btn-active-border-color: #eee; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #eee; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #eee; + --bs-gradient: none; } + +.btn-outline-dark { + --bs-btn-color: #222; + --bs-btn-border-color: #222; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #222; + --bs-btn-hover-border-color: #222; + --bs-btn-focus-shadow-rgb: 34, 34, 34; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #222; + --bs-btn-active-border-color: #222; + --bs-btn-active-shadow: inset 0 3px 5px rgba(25, 31, 39, 0.125); + --bs-btn-disabled-color: #222; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #222; + --bs-gradient: none; } + +.btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: 0 0 0 #000; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; } + .btn-link:focus-visible { + color: var(--bs-btn-color); } + .btn-link:hover { + color: var(--bs-btn-hover-color); } + +.btn-lg { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: var(--bs-border-radius-lg); } + +.btn-sm { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: var(--bs-border-radius-sm); } + +.fade { + transition: opacity 0.15s linear; } + @media (prefers-reduced-motion: reduce) { + .fade { + transition: none; } } + .fade:not(.show) { + opacity: 0; } + +.collapse:not(.show) { + display: none; } + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; } } + .collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; } + @media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; } } +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; } + +.dropdown-toggle { + white-space: nowrap; } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; } + .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: var(--bs-body-color); + --bs-dropdown-bg: var(--bs-body-bg); + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: var(--bs-border-radius); + --bs-dropdown-border-width: var(--bs-border-width); + --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width)); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: var(--bs-box-shadow); + --bs-dropdown-link-color: var(--bs-body-color); + --bs-dropdown-link-hover-color: var(--bs-body-color); + --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: var(--bs-tertiary-color); + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); } + .dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); } + +.dropdown-menu-start { + --bs-position: start; } + .dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; } + +.dropdown-menu-end { + --bs-position: end; } + .dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; } + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-sm-end { + --bs-position: end; } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-md-end { + --bs-position: end; } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-lg-end { + --bs-position: end; } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-xl-end { + --bs-position: end; } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; } } + +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; } + .dropdown-menu-xxl-end { + --bs-position: end; } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; } } + +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); } + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; } + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); } + +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; } + +.dropend .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropend .dropdown-toggle::after { + vertical-align: 0; } + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); } + +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; } + +.dropstart .dropdown-toggle::after { + display: none; } + +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; } + +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; } + +.dropstart .dropdown-toggle::before { + vertical-align: 0; } + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; } + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; + border-radius: var(--bs-dropdown-item-border-radius, 0); } + .dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); } + .dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); } + .dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; } + +.dropdown-menu.show { + display: block; } + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; } + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); } + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; } + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + +.nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + background: none; + border: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; } } + .nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); } + .nav-link:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } + .nav-link.disabled, .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; } + +.nav-tabs { + --bs-nav-tabs-border-width: var(--bs-border-width); + --bs-nav-tabs-border-color: var(--bs-border-color); + --bs-nav-tabs-border-radius: var(--bs-border-radius); + --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color); + --bs-nav-tabs-link-active-color: var(--bs-emphasis-color); + --bs-nav-tabs-link-active-bg: var(--bs-body-bg); + --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg); + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); } + .nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); } + .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); } + .nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.nav-pills { + --bs-nav-pills-border-radius: var(--bs-border-radius); + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; } + .nav-pills .nav-link { + border-radius: var(--bs-nav-pills-border-radius); } + .nav-pills .nav-link.active, + .nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); } + +.nav-underline { + --bs-nav-underline-gap: 1rem; + --bs-nav-underline-border-width: 0.125rem; + --bs-nav-underline-link-active-color: var(--bs-emphasis-color); + gap: var(--bs-nav-underline-gap); } + .nav-underline .nav-link { + padding-right: 0; + padding-left: 0; + border-bottom: var(--bs-nav-underline-border-width) solid transparent; } + .nav-underline .nav-link:hover, .nav-underline .nav-link:focus { + border-bottom-color: currentcolor; } + .nav-underline .nav-link.active, + .nav-underline .show > .nav-link { + font-weight: 700; + color: var(--bs-nav-underline-link-active-color); + border-bottom-color: currentcolor; } + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; } + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; } + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; } + +.tab-content > .tab-pane { + display: none; } + +.tab-content > .active { + display: block; } + +.navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65); + --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8); + --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3); + --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15); + --bs-navbar-toggler-border-radius: var(--bs-border-radius); + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); } + .navbar > .container, + .navbar > .container-fluid, + .navbar > .container-sm, + .navbar > .container-md, + .navbar > .container-lg, + .navbar > .container-xl, + .navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; } + +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; } + .navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); } + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; } + .navbar-nav .nav-link.active, .navbar-nav .nav-link.show { + color: var(--bs-navbar-active-color); } + .navbar-nav .dropdown-menu { + position: static; } + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); } + .navbar-text a, + .navbar-text a:hover, + .navbar-text a:focus { + color: var(--bs-navbar-active-color); } + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; } + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); } + @media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; } } + .navbar-toggler:hover { + text-decoration: none; } + .navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); } + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; } + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; } + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-sm .navbar-nav { + flex-direction: row; } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-sm .navbar-toggler { + display: none; } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-md .navbar-nav { + flex-direction: row; } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-md .navbar-toggler { + display: none; } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-lg .navbar-nav { + flex-direction: row; } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-lg .navbar-toggler { + display: none; } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xl .navbar-nav { + flex-direction: row; } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xl .navbar-toggler { + display: none; } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand-xxl .navbar-toggler { + display: none; } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } } + +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; } + .navbar-expand .navbar-nav { + flex-direction: row; } + .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; } + .navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); } + .navbar-expand .navbar-nav-scroll { + overflow: visible; } + .navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; } + .navbar-expand .navbar-toggler { + display: none; } + .navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; } + .navbar-expand .offcanvas .offcanvas-header { + display: none; } + .navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; } + +.navbar-dark, +.navbar[data-bs-theme="dark"] { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +[data-bs-theme="dark"] .navbar-toggler-icon { + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } + +.card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-title-color: ; + --bs-card-subtitle-color: ; + --bs-card-border-width: var(--bs-border-width); + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: var(--bs-border-radius); + --bs-card-box-shadow: ; + --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); + --bs-card-cap-color: ; + --bs-card-height: ; + --bs-card-color: ; + --bs-card-bg: var(--bs-body-bg); + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + color: var(--bs-body-color); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); } + .card > hr { + margin-right: 0; + margin-left: 0; } + .card > .list-group { + border-top: inherit; + border-bottom: inherit; } + .card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + .card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + .card > .card-header + .list-group, + .card > .list-group + .card-footer { + border-top: 0; } + +.card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); } + +.card-title { + margin-bottom: var(--bs-card-title-spacer-y); + color: var(--bs-card-title-color); } + +.card-subtitle { + margin-top: calc(-.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; + color: var(--bs-card-subtitle-color); } + +.card-text:last-child { + margin-bottom: 0; } + +.card-link + .card-link { + margin-left: var(--bs-card-spacer-x); } + +.card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); } + .card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; } + +.card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); } + .card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); } + +.card-header-tabs { + margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; } + .card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); } + +.card-header-pills { + margin-right: calc(-.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-.5 * var(--bs-card-cap-padding-x)); } + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; } + +.card-img, +.card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); } + +.card-img, +.card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); } + +.card-group > .card { + margin-bottom: var(--bs-card-group-margin); } + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; } } + +.accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: var(--bs-body-bg); + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: var(--bs-border-width); + --bs-accordion-border-radius: var(--bs-border-radius); + --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-border-color: #86b7fe; + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: var(--bs-primary-text-emphasis); + --bs-accordion-active-bg: var(--bs-primary-bg-subtle); } + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); } + @media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; } } + .accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); } + .accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); } + .accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); } + @media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; } } + .accordion-button:hover { + z-index: 2; } + .accordion-button:focus { + z-index: 3; + border-color: var(--bs-accordion-btn-focus-border-color); + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); } + +.accordion-header { + margin-bottom: 0; } + +.accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); } + .accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); } + .accordion-item:first-of-type .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); } + .accordion-item:not(:first-of-type) { + border-top: 0; } + .accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); } + .accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); } + .accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); } + +.accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); } + +.accordion-flush .accordion-collapse { + border-width: 0; } + +.accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; } + .accordion-flush .accordion-item:first-child { + border-top: 0; } + .accordion-flush .accordion-item:last-child { + border-bottom: 0; } + .accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed { + border-radius: 0; } + +[data-bs-theme="dark"] .accordion-button::after { + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); } + +.breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-bg: ; + --bs-breadcrumb-border-radius: ; + --bs-breadcrumb-divider-color: var(--bs-secondary-color); + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); } + +.breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); } + .breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; } + +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); } + +.pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: var(--bs-body-bg); + --bs-pagination-border-width: var(--bs-border-width); + --bs-pagination-border-color: var(--bs-border-color); + --bs-pagination-border-radius: var(--bs-border-radius); + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: var(--bs-tertiary-bg); + --bs-pagination-hover-border-color: var(--bs-border-color); + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: var(--bs-secondary-bg); + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: var(--bs-secondary-color); + --bs-pagination-disabled-bg: var(--bs-secondary-bg); + --bs-pagination-disabled-border-color: var(--bs-border-color); + display: flex; + padding-left: 0; + list-style: none; } + +.page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; } } + .page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); } + .page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); } + .page-link.active, .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); } + .page-link.disabled, .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); } + +.page-item:not(:first-child) .page-link { + margin-left: calc(var(--bs-border-width) * -1); } + +.page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); } + +.page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); } + +.pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: var(--bs-border-radius-lg); } + +.pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: var(--bs-border-radius-sm); } + +.btn-close { + --bs-btn-close-color: #191f27; + --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23191f27'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); + --bs-btn-close-opacity: 0.5; + --bs-btn-close-hover-opacity: 0.75; + --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-btn-close-focus-opacity: 1; + --bs-btn-close-disabled-opacity: 0.25; + --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: var(--bs-btn-close-color); + background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: var(--bs-btn-close-opacity); } + .btn-close:hover { + color: var(--bs-btn-close-color); + text-decoration: none; + opacity: var(--bs-btn-close-hover-opacity); } + .btn-close:focus { + outline: 0; + box-shadow: var(--bs-btn-close-focus-shadow); + opacity: var(--bs-btn-close-focus-opacity); } + .btn-close:disabled, .btn-close.disabled { + pointer-events: none; + user-select: none; + opacity: var(--bs-btn-close-disabled-opacity); } + +.btn-close-white { + filter: var(--bs-btn-close-white-filter); } + +[data-bs-theme="dark"] .btn-close { + filter: var(--bs-btn-close-white-filter); } + +.modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-color: ; + --bs-modal-bg: var(--bs-body-bg); + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: var(--bs-border-width); + --bs-modal-border-radius: var(--bs-border-radius-lg); + --bs-modal-box-shadow: var(--bs-box-shadow-sm); + --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width))); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: var(--bs-border-width); + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-bg: ; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: var(--bs-border-width); + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; } + +.modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; } + .modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); } + @media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; } } + .modal.show .modal-dialog { + transform: none; } + .modal.modal-static .modal-dialog { + transform: scale(1.02); } + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); } + .modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; } + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); } + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; } + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #191f27; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); } + .modal-backdrop.fade { + opacity: 0; } + .modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); } + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); } + .modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5); + margin: calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto; } + +.modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); } + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); } + +.modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); } + .modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * .5); } + +@media (min-width: 576px) { + .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: var(--bs-box-shadow); } + .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; } + .modal-sm { + --bs-modal-width: 300px; } } + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + --bs-modal-width: 800px; } } + +@media (min-width: 1200px) { + .modal-xl { + --bs-modal-width: 1140px; } } + +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen .modal-header, + .modal-fullscreen .modal-footer { + border-radius: 0; } + .modal-fullscreen .modal-body { + overflow-y: auto; } + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-sm-down .modal-header, + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-md-down .modal-header, + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-lg-down .modal-header, + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xl-down .modal-header, + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; } } + +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-header, + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; } } + +.clearfix::after { + display: block; + clear: both; + content: ""; } + +.text-bg-primary { + color: #fff !important; + background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-secondary { + color: #fff !important; + background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-success { + color: #fff !important; + background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-info { + color: #191f27 !important; + background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-warning { + color: #191f27 !important; + background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-danger { + color: #fff !important; + background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-light { + color: #191f27 !important; + background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important; } + +.text-bg-dark { + color: #fff !important; + background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important; } + +.link-primary { + color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-primary:hover, .link-primary:focus { + color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important; } + +.link-secondary { + color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-secondary:hover, .link-secondary:focus { + color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important; } + +.link-success { + color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-success:hover, .link-success:focus { + color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important; } + +.link-info { + color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-info:hover, .link-info:focus { + color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important; } + +.link-warning { + color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-warning:hover, .link-warning:focus { + color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important; } + +.link-danger { + color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-danger:hover, .link-danger:focus { + color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important; } + +.link-light { + color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-light:hover, .link-light:focus { + color: RGBA(241, 241, 241, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(241, 241, 241, var(--bs-link-underline-opacity, 1)) !important; } + +.link-dark { + color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-dark:hover, .link-dark:focus { + color: RGBA(27, 27, 27, var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(27, 27, 27, var(--bs-link-underline-opacity, 1)) !important; } + +.link-body-emphasis { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + .link-body-emphasis:hover, .link-body-emphasis:focus { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; } + +.focus-ring:focus { + outline: 0; + box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color); } + +.icon-link { + display: inline-flex; + gap: 0.375rem; + align-items: center; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-underline-offset: 0.25em; + backface-visibility: hidden; } + .icon-link > .bi { + flex-shrink: 0; + width: 1em; + height: 1em; + fill: currentcolor; + transition: 0.2s ease-in-out transform; } + @media (prefers-reduced-motion: reduce) { + .icon-link > .bi { + transition: none; } } +.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi { + transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0)); } + +.ratio { + position: relative; + width: 100%; } + .ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; } + .ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } + +.ratio-1x1 { + --bs-aspect-ratio: 100%; } + +.ratio-4x3 { + --bs-aspect-ratio: calc(3 / 4 * 100%); } + +.ratio-16x9 { + --bs-aspect-ratio: calc(9 / 16 * 100%); } + +.ratio-21x9 { + --bs-aspect-ratio: calc(9 / 21 * 100%); } + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; } + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; } + +.sticky-top { + position: sticky; + top: 0; + z-index: 1020; } + +.sticky-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } + +@media (min-width: 576px) { + .sticky-sm-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-sm-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 768px) { + .sticky-md-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-md-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 992px) { + .sticky-lg-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-lg-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1200px) { + .sticky-xl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +@media (min-width: 1400px) { + .sticky-xxl-top { + position: sticky; + top: 0; + z-index: 1020; } + .sticky-xxl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; } } + +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; } + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; } + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; } + .visually-hidden:not(caption), + .visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { + position: absolute !important; } + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; } + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + +.vr { + display: inline-block; + align-self: stretch; + width: var(--bs-border-width); + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; } + +.align-baseline { + vertical-align: baseline !important; } + +.align-top { + vertical-align: top !important; } + +.align-middle { + vertical-align: middle !important; } + +.align-bottom { + vertical-align: bottom !important; } + +.align-text-bottom { + vertical-align: text-bottom !important; } + +.align-text-top { + vertical-align: text-top !important; } + +.float-start { + float: left !important; } + +.float-end { + float: right !important; } + +.float-none { + float: none !important; } + +.object-fit-contain { + object-fit: contain !important; } + +.object-fit-cover { + object-fit: cover !important; } + +.object-fit-fill { + object-fit: fill !important; } + +.object-fit-scale { + object-fit: scale-down !important; } + +.object-fit-none { + object-fit: none !important; } + +.opacity-0 { + opacity: 0 !important; } + +.opacity-25 { + opacity: 0.25 !important; } + +.opacity-50 { + opacity: 0.5 !important; } + +.opacity-75 { + opacity: 0.75 !important; } + +.opacity-100 { + opacity: 1 !important; } + +.overflow-auto { + overflow: auto !important; } + +.overflow-hidden { + overflow: hidden !important; } + +.overflow-visible { + overflow: visible !important; } + +.overflow-scroll { + overflow: scroll !important; } + +.overflow-x-auto { + overflow-x: auto !important; } + +.overflow-x-hidden { + overflow-x: hidden !important; } + +.overflow-x-visible { + overflow-x: visible !important; } + +.overflow-x-scroll { + overflow-x: scroll !important; } + +.overflow-y-auto { + overflow-y: auto !important; } + +.overflow-y-hidden { + overflow-y: hidden !important; } + +.overflow-y-visible { + overflow-y: visible !important; } + +.overflow-y-scroll { + overflow-y: scroll !important; } + +.d-inline { + display: inline !important; } + +.d-inline-block { + display: inline-block !important; } + +.d-block { + display: block !important; } + +.d-grid { + display: grid !important; } + +.d-inline-grid { + display: inline-grid !important; } + +.d-table { + display: table !important; } + +.d-table-row { + display: table-row !important; } + +.d-table-cell { + display: table-cell !important; } + +.d-flex { + display: flex !important; } + +.d-inline-flex { + display: inline-flex !important; } + +.d-none { + display: none !important; } + +.shadow { + box-shadow: var(--bs-box-shadow) !important; } + +.shadow-sm { + box-shadow: var(--bs-box-shadow-sm) !important; } + +.shadow-lg { + box-shadow: var(--bs-box-shadow-lg) !important; } + +.shadow-none { + box-shadow: none !important; } + +.focus-ring-primary { + --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-secondary { + --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-success { + --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-info { + --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-warning { + --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-danger { + --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-light { + --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity)); } + +.focus-ring-dark { + --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity)); } + +.position-static { + position: static !important; } + +.position-relative { + position: relative !important; } + +.position-absolute { + position: absolute !important; } + +.position-fixed { + position: fixed !important; } + +.position-sticky { + position: sticky !important; } + +.top-0 { + top: 0 !important; } + +.top-50 { + top: 50% !important; } + +.top-100 { + top: 100% !important; } + +.bottom-0 { + bottom: 0 !important; } + +.bottom-50 { + bottom: 50% !important; } + +.bottom-100 { + bottom: 100% !important; } + +.start-0 { + left: 0 !important; } + +.start-50 { + left: 50% !important; } + +.start-100 { + left: 100% !important; } + +.end-0 { + right: 0 !important; } + +.end-50 { + right: 50% !important; } + +.end-100 { + right: 100% !important; } + +.translate-middle { + transform: translate(-50%, -50%) !important; } + +.translate-middle-x { + transform: translateX(-50%) !important; } + +.translate-middle-y { + transform: translateY(-50%) !important; } + +.border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-0 { + border: 0 !important; } + +.border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-top-0 { + border-top: 0 !important; } + +.border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-end-0 { + border-right: 0 !important; } + +.border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-bottom-0 { + border-bottom: 0 !important; } + +.border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; } + +.border-start-0 { + border-left: 0 !important; } + +.border-primary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; } + +.border-secondary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; } + +.border-success { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; } + +.border-info { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; } + +.border-warning { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; } + +.border-danger { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; } + +.border-light { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; } + +.border-dark { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; } + +.border-black { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important; } + +.border-white { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; } + +.border-primary-subtle { + border-color: var(--bs-primary-border-subtle) !important; } + +.border-secondary-subtle { + border-color: var(--bs-secondary-border-subtle) !important; } + +.border-success-subtle { + border-color: var(--bs-success-border-subtle) !important; } + +.border-info-subtle { + border-color: var(--bs-info-border-subtle) !important; } + +.border-warning-subtle { + border-color: var(--bs-warning-border-subtle) !important; } + +.border-danger-subtle { + border-color: var(--bs-danger-border-subtle) !important; } + +.border-light-subtle { + border-color: var(--bs-light-border-subtle) !important; } + +.border-dark-subtle { + border-color: var(--bs-dark-border-subtle) !important; } + +.border-1 { + border-width: 1px !important; } + +.border-2 { + border-width: 2px !important; } + +.border-3 { + border-width: 3px !important; } + +.border-4 { + border-width: 4px !important; } + +.border-5 { + border-width: 5px !important; } + +.border-opacity-10 { + --bs-border-opacity: 0.1; } + +.border-opacity-25 { + --bs-border-opacity: 0.25; } + +.border-opacity-50 { + --bs-border-opacity: 0.5; } + +.border-opacity-75 { + --bs-border-opacity: 0.75; } + +.border-opacity-100 { + --bs-border-opacity: 1; } + +.w-100 { + width: 100% !important; } + +.w-auto { + width: auto !important; } + +.min-vw-100 { + min-width: 100vw !important; } + +.h-100 { + height: 100% !important; } + +.h-auto { + height: auto !important; } + +.vh-100 { + height: 100vh !important; } + +.min-vh-100 { + min-height: 100vh !important; } + +.flex-fill { + flex: 1 1 auto !important; } + +.flex-row { + flex-direction: row !important; } + +.flex-column { + flex-direction: column !important; } + +.flex-row-reverse { + flex-direction: row-reverse !important; } + +.flex-column-reverse { + flex-direction: column-reverse !important; } + +.flex-grow-0 { + flex-grow: 0 !important; } + +.flex-grow-1 { + flex-grow: 1 !important; } + +.flex-shrink-0 { + flex-shrink: 0 !important; } + +.flex-shrink-1 { + flex-shrink: 1 !important; } + +.flex-wrap { + flex-wrap: wrap !important; } + +.flex-nowrap { + flex-wrap: nowrap !important; } + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; } + +.justify-content-start { + justify-content: flex-start !important; } + +.justify-content-end { + justify-content: flex-end !important; } + +.justify-content-center { + justify-content: center !important; } + +.justify-content-between { + justify-content: space-between !important; } + +.justify-content-around { + justify-content: space-around !important; } + +.justify-content-evenly { + justify-content: space-evenly !important; } + +.align-items-start { + align-items: flex-start !important; } + +.align-items-end { + align-items: flex-end !important; } + +.align-items-center { + align-items: center !important; } + +.align-items-baseline { + align-items: baseline !important; } + +.align-items-stretch { + align-items: stretch !important; } + +.align-content-start { + align-content: flex-start !important; } + +.align-content-end { + align-content: flex-end !important; } + +.align-content-center { + align-content: center !important; } + +.align-content-between { + align-content: space-between !important; } + +.align-content-around { + align-content: space-around !important; } + +.align-content-stretch { + align-content: stretch !important; } + +.align-self-auto { + align-self: auto !important; } + +.align-self-start { + align-self: flex-start !important; } + +.align-self-end { + align-self: flex-end !important; } + +.align-self-center { + align-self: center !important; } + +.align-self-baseline { + align-self: baseline !important; } + +.align-self-stretch { + align-self: stretch !important; } + +.order-first { + order: -1 !important; } + +.order-0 { + order: 0 !important; } + +.order-1 { + order: 1 !important; } + +.order-2 { + order: 2 !important; } + +.order-3 { + order: 3 !important; } + +.order-4 { + order: 4 !important; } + +.order-5 { + order: 5 !important; } + +.order-last { + order: 6 !important; } + +.m-auto { + margin: auto !important; } + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; } + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + +.mt-0 { + margin-top: 0 !important; } + +.mt-1 { + margin-top: 0.25rem !important; } + +.mt-2 { + margin-top: 0.5rem !important; } + +.mt-3 { + margin-top: 1rem !important; } + +.mt-4 { + margin-top: 1.5rem !important; } + +.mt-5 { + margin-top: 3rem !important; } + +.mt-auto { + margin-top: auto !important; } + +.me-0 { + margin-right: 0 !important; } + +.me-1 { + margin-right: 0.25rem !important; } + +.me-2 { + margin-right: 0.5rem !important; } + +.me-3 { + margin-right: 1rem !important; } + +.me-4 { + margin-right: 1.5rem !important; } + +.me-5 { + margin-right: 3rem !important; } + +.me-auto { + margin-right: auto !important; } + +.mb-0 { + margin-bottom: 0 !important; } + +.mb-1 { + margin-bottom: 0.25rem !important; } + +.mb-2 { + margin-bottom: 0.5rem !important; } + +.mb-3 { + margin-bottom: 1rem !important; } + +.mb-4 { + margin-bottom: 1.5rem !important; } + +.mb-5 { + margin-bottom: 3rem !important; } + +.mb-auto { + margin-bottom: auto !important; } + +.ms-0 { + margin-left: 0 !important; } + +.ms-1 { + margin-left: 0.25rem !important; } + +.ms-2 { + margin-left: 0.5rem !important; } + +.ms-3 { + margin-left: 1rem !important; } + +.ms-4 { + margin-left: 1.5rem !important; } + +.ms-5 { + margin-left: 3rem !important; } + +.ms-auto { + margin-left: auto !important; } + +.p-0 { + padding: 0 !important; } + +.p-1 { + padding: 0.25rem !important; } + +.p-2 { + padding: 0.5rem !important; } + +.p-3 { + padding: 1rem !important; } + +.p-4 { + padding: 1.5rem !important; } + +.p-5 { + padding: 3rem !important; } + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + +.pt-0 { + padding-top: 0 !important; } + +.pt-1 { + padding-top: 0.25rem !important; } + +.pt-2 { + padding-top: 0.5rem !important; } + +.pt-3 { + padding-top: 1rem !important; } + +.pt-4 { + padding-top: 1.5rem !important; } + +.pt-5 { + padding-top: 3rem !important; } + +.pe-0 { + padding-right: 0 !important; } + +.pe-1 { + padding-right: 0.25rem !important; } + +.pe-2 { + padding-right: 0.5rem !important; } + +.pe-3 { + padding-right: 1rem !important; } + +.pe-4 { + padding-right: 1.5rem !important; } + +.pe-5 { + padding-right: 3rem !important; } + +.pb-0 { + padding-bottom: 0 !important; } + +.pb-1 { + padding-bottom: 0.25rem !important; } + +.pb-2 { + padding-bottom: 0.5rem !important; } + +.pb-3 { + padding-bottom: 1rem !important; } + +.pb-4 { + padding-bottom: 1.5rem !important; } + +.pb-5 { + padding-bottom: 3rem !important; } + +.ps-0 { + padding-left: 0 !important; } + +.ps-1 { + padding-left: 0.25rem !important; } + +.ps-2 { + padding-left: 0.5rem !important; } + +.ps-3 { + padding-left: 1rem !important; } + +.ps-4 { + padding-left: 1.5rem !important; } + +.ps-5 { + padding-left: 3rem !important; } + +.gap-0 { + gap: 0 !important; } + +.gap-1 { + gap: 0.25rem !important; } + +.gap-2 { + gap: 0.5rem !important; } + +.gap-3 { + gap: 1rem !important; } + +.gap-4 { + gap: 1.5rem !important; } + +.gap-5 { + gap: 3rem !important; } + +.row-gap-0 { + row-gap: 0 !important; } + +.row-gap-1 { + row-gap: 0.25rem !important; } + +.row-gap-2 { + row-gap: 0.5rem !important; } + +.row-gap-3 { + row-gap: 1rem !important; } + +.row-gap-4 { + row-gap: 1.5rem !important; } + +.row-gap-5 { + row-gap: 3rem !important; } + +.column-gap-0 { + column-gap: 0 !important; } + +.column-gap-1 { + column-gap: 0.25rem !important; } + +.column-gap-2 { + column-gap: 0.5rem !important; } + +.column-gap-3 { + column-gap: 1rem !important; } + +.column-gap-4 { + column-gap: 1.5rem !important; } + +.column-gap-5 { + column-gap: 3rem !important; } + +.font-monospace { + font-family: var(--bs-font-monospace) !important; } + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; } + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; } + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; } + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; } + +.fs-5 { + font-size: 1.25rem !important; } + +.fs-6 { + font-size: 1rem !important; } + +.fst-italic { + font-style: italic !important; } + +.fst-normal { + font-style: normal !important; } + +.fw-lighter { + font-weight: lighter !important; } + +.fw-light { + font-weight: 300 !important; } + +.fw-normal { + font-weight: 400 !important; } + +.fw-medium { + font-weight: 500 !important; } + +.fw-semibold { + font-weight: 600 !important; } + +.fw-bold { + font-weight: 700 !important; } + +.fw-bolder { + font-weight: bolder !important; } + +.lh-1 { + line-height: 1 !important; } + +.lh-sm { + line-height: 1.25 !important; } + +.lh-base { + line-height: 1.5 !important; } + +.lh-lg { + line-height: 2 !important; } + +.text-start { + text-align: left !important; } + +.text-end { + text-align: right !important; } + +.text-center { + text-align: center !important; } + +.text-decoration-none { + text-decoration: none !important; } + +.text-decoration-underline { + text-decoration: underline !important; } + +.text-decoration-line-through { + text-decoration: line-through !important; } + +.text-lowercase { + text-transform: lowercase !important; } + +.text-uppercase { + text-transform: uppercase !important; } + +.text-capitalize { + text-transform: capitalize !important; } + +.text-wrap { + white-space: normal !important; } + +.text-nowrap { + white-space: nowrap !important; } + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; } + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; } + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; } + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; } + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; } + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; } + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; } + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; } + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; } + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; } + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; } + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; } + +.text-muted { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(25, 31, 39, 0.5) !important; } + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; } + +.text-body-secondary { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; } + +.text-body-tertiary { + --bs-text-opacity: 1; + color: var(--bs-tertiary-color) !important; } + +.text-body-emphasis { + --bs-text-opacity: 1; + color: var(--bs-emphasis-color) !important; } + +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; } + +.text-opacity-25 { + --bs-text-opacity: 0.25; } + +.text-opacity-50 { + --bs-text-opacity: 0.5; } + +.text-opacity-75 { + --bs-text-opacity: 0.75; } + +.text-opacity-100 { + --bs-text-opacity: 1; } + +.text-primary-emphasis { + color: var(--bs-primary-text-emphasis) !important; } + +.text-secondary-emphasis { + color: var(--bs-secondary-text-emphasis) !important; } + +.text-success-emphasis { + color: var(--bs-success-text-emphasis) !important; } + +.text-info-emphasis { + color: var(--bs-info-text-emphasis) !important; } + +.text-warning-emphasis { + color: var(--bs-warning-text-emphasis) !important; } + +.text-danger-emphasis { + color: var(--bs-danger-text-emphasis) !important; } + +.text-light-emphasis { + color: var(--bs-light-text-emphasis) !important; } + +.text-dark-emphasis { + color: var(--bs-dark-text-emphasis) !important; } + +.link-opacity-10 { + --bs-link-opacity: 0.1; } + +.link-opacity-10-hover:hover { + --bs-link-opacity: 0.1; } + +.link-opacity-25 { + --bs-link-opacity: 0.25; } + +.link-opacity-25-hover:hover { + --bs-link-opacity: 0.25; } + +.link-opacity-50 { + --bs-link-opacity: 0.5; } + +.link-opacity-50-hover:hover { + --bs-link-opacity: 0.5; } + +.link-opacity-75 { + --bs-link-opacity: 0.75; } + +.link-opacity-75-hover:hover { + --bs-link-opacity: 0.75; } + +.link-opacity-100 { + --bs-link-opacity: 1; } + +.link-opacity-100-hover:hover { + --bs-link-opacity: 1; } + +.link-offset-1 { + text-underline-offset: 0.125em !important; } + +.link-offset-1-hover:hover { + text-underline-offset: 0.125em !important; } + +.link-offset-2 { + text-underline-offset: 0.25em !important; } + +.link-offset-2-hover:hover { + text-underline-offset: 0.25em !important; } + +.link-offset-3 { + text-underline-offset: 0.375em !important; } + +.link-offset-3-hover:hover { + text-underline-offset: 0.375em !important; } + +.link-underline-primary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-secondary { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-success { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-info { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-warning { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-danger { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-light { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline-dark { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; } + +.link-underline { + --bs-link-underline-opacity: 1; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; } + +.link-underline-opacity-0 { + --bs-link-underline-opacity: 0; } + +.link-underline-opacity-0-hover:hover { + --bs-link-underline-opacity: 0; } + +.link-underline-opacity-10 { + --bs-link-underline-opacity: 0.1; } + +.link-underline-opacity-10-hover:hover { + --bs-link-underline-opacity: 0.1; } + +.link-underline-opacity-25 { + --bs-link-underline-opacity: 0.25; } + +.link-underline-opacity-25-hover:hover { + --bs-link-underline-opacity: 0.25; } + +.link-underline-opacity-50 { + --bs-link-underline-opacity: 0.5; } + +.link-underline-opacity-50-hover:hover { + --bs-link-underline-opacity: 0.5; } + +.link-underline-opacity-75 { + --bs-link-underline-opacity: 0.75; } + +.link-underline-opacity-75-hover:hover { + --bs-link-underline-opacity: 0.75; } + +.link-underline-opacity-100 { + --bs-link-underline-opacity: 1; } + +.link-underline-opacity-100-hover:hover { + --bs-link-underline-opacity: 1; } + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; } + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; } + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; } + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; } + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; } + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; } + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; } + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; } + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; } + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; } + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; } + +.bg-body-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-body-tertiary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important; } + +.bg-opacity-10 { + --bs-bg-opacity: 0.1; } + +.bg-opacity-25 { + --bs-bg-opacity: 0.25; } + +.bg-opacity-50 { + --bs-bg-opacity: 0.5; } + +.bg-opacity-75 { + --bs-bg-opacity: 0.75; } + +.bg-opacity-100 { + --bs-bg-opacity: 1; } + +.bg-primary-subtle { + background-color: var(--bs-primary-bg-subtle) !important; } + +.bg-secondary-subtle { + background-color: var(--bs-secondary-bg-subtle) !important; } + +.bg-success-subtle { + background-color: var(--bs-success-bg-subtle) !important; } + +.bg-info-subtle { + background-color: var(--bs-info-bg-subtle) !important; } + +.bg-warning-subtle { + background-color: var(--bs-warning-bg-subtle) !important; } + +.bg-danger-subtle { + background-color: var(--bs-danger-bg-subtle) !important; } + +.bg-light-subtle { + background-color: var(--bs-light-bg-subtle) !important; } + +.bg-dark-subtle { + background-color: var(--bs-dark-bg-subtle) !important; } + +.bg-gradient { + background-image: var(--bs-gradient) !important; } + +.user-select-all { + user-select: all !important; } + +.user-select-auto { + user-select: auto !important; } + +.user-select-none { + user-select: none !important; } + +.pe-none { + pointer-events: none !important; } + +.pe-auto { + pointer-events: auto !important; } + +.rounded { + border-radius: var(--bs-border-radius) !important; } + +.rounded-0 { + border-radius: 0 !important; } + +.rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; } + +.rounded-2, .content blockquote, .gallery-item img, .btn { + border-radius: var(--bs-border-radius) !important; } + +.rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; } + +.rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; } + +.rounded-5 { + border-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-circle { + border-radius: 50% !important; } + +.rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; } + +.rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; } + +.rounded-top-0 { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; } + +.rounded-top-1 { + border-top-left-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; } + +.rounded-top-2 { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; } + +.rounded-top-3 { + border-top-left-radius: var(--bs-border-radius-lg) !important; + border-top-right-radius: var(--bs-border-radius-lg) !important; } + +.rounded-top-4 { + border-top-left-radius: var(--bs-border-radius-xl) !important; + border-top-right-radius: var(--bs-border-radius-xl) !important; } + +.rounded-top-5 { + border-top-left-radius: var(--bs-border-radius-xxl) !important; + border-top-right-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-top-circle { + border-top-left-radius: 50% !important; + border-top-right-radius: 50% !important; } + +.rounded-top-pill { + border-top-left-radius: var(--bs-border-radius-pill) !important; + border-top-right-radius: var(--bs-border-radius-pill) !important; } + +.rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; } + +.rounded-end-0 { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; } + +.rounded-end-1 { + border-top-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; } + +.rounded-end-2 { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; } + +.rounded-end-3 { + border-top-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-right-radius: var(--bs-border-radius-lg) !important; } + +.rounded-end-4 { + border-top-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-right-radius: var(--bs-border-radius-xl) !important; } + +.rounded-end-5 { + border-top-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-end-circle { + border-top-right-radius: 50% !important; + border-bottom-right-radius: 50% !important; } + +.rounded-end-pill { + border-top-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-right-radius: var(--bs-border-radius-pill) !important; } + +.rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; } + +.rounded-bottom-0 { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; } + +.rounded-bottom-1 { + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-left-radius: var(--bs-border-radius-sm) !important; } + +.rounded-bottom-2 { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; } + +.rounded-bottom-3 { + border-bottom-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-left-radius: var(--bs-border-radius-lg) !important; } + +.rounded-bottom-4 { + border-bottom-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-left-radius: var(--bs-border-radius-xl) !important; } + +.rounded-bottom-5 { + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-bottom-circle { + border-bottom-right-radius: 50% !important; + border-bottom-left-radius: 50% !important; } + +.rounded-bottom-pill { + border-bottom-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-left-radius: var(--bs-border-radius-pill) !important; } + +.rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; } + +.rounded-start-0 { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; } + +.rounded-start-1 { + border-bottom-left-radius: var(--bs-border-radius-sm) !important; + border-top-left-radius: var(--bs-border-radius-sm) !important; } + +.rounded-start-2 { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; } + +.rounded-start-3 { + border-bottom-left-radius: var(--bs-border-radius-lg) !important; + border-top-left-radius: var(--bs-border-radius-lg) !important; } + +.rounded-start-4 { + border-bottom-left-radius: var(--bs-border-radius-xl) !important; + border-top-left-radius: var(--bs-border-radius-xl) !important; } + +.rounded-start-5 { + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; + border-top-left-radius: var(--bs-border-radius-xxl) !important; } + +.rounded-start-circle { + border-bottom-left-radius: 50% !important; + border-top-left-radius: 50% !important; } + +.rounded-start-pill { + border-bottom-left-radius: var(--bs-border-radius-pill) !important; + border-top-left-radius: var(--bs-border-radius-pill) !important; } + +.visible { + visibility: visible !important; } + +.invisible { + visibility: hidden !important; } + +.z-n1 { + z-index: -1 !important; } + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; } + .float-sm-end { + float: right !important; } + .float-sm-none { + float: none !important; } + .object-fit-sm-contain { + object-fit: contain !important; } + .object-fit-sm-cover { + object-fit: cover !important; } + .object-fit-sm-fill { + object-fit: fill !important; } + .object-fit-sm-scale { + object-fit: scale-down !important; } + .object-fit-sm-none { + object-fit: none !important; } + .d-sm-inline { + display: inline !important; } + .d-sm-inline-block { + display: inline-block !important; } + .d-sm-block { + display: block !important; } + .d-sm-grid { + display: grid !important; } + .d-sm-inline-grid { + display: inline-grid !important; } + .d-sm-table { + display: table !important; } + .d-sm-table-row { + display: table-row !important; } + .d-sm-table-cell { + display: table-cell !important; } + .d-sm-flex { + display: flex !important; } + .d-sm-inline-flex { + display: inline-flex !important; } + .d-sm-none { + display: none !important; } + .flex-sm-fill { + flex: 1 1 auto !important; } + .flex-sm-row { + flex-direction: row !important; } + .flex-sm-column { + flex-direction: column !important; } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; } + .flex-sm-grow-0 { + flex-grow: 0 !important; } + .flex-sm-grow-1 { + flex-grow: 1 !important; } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; } + .flex-sm-wrap { + flex-wrap: wrap !important; } + .flex-sm-nowrap { + flex-wrap: nowrap !important; } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-sm-start { + justify-content: flex-start !important; } + .justify-content-sm-end { + justify-content: flex-end !important; } + .justify-content-sm-center { + justify-content: center !important; } + .justify-content-sm-between { + justify-content: space-between !important; } + .justify-content-sm-around { + justify-content: space-around !important; } + .justify-content-sm-evenly { + justify-content: space-evenly !important; } + .align-items-sm-start { + align-items: flex-start !important; } + .align-items-sm-end { + align-items: flex-end !important; } + .align-items-sm-center { + align-items: center !important; } + .align-items-sm-baseline { + align-items: baseline !important; } + .align-items-sm-stretch { + align-items: stretch !important; } + .align-content-sm-start { + align-content: flex-start !important; } + .align-content-sm-end { + align-content: flex-end !important; } + .align-content-sm-center { + align-content: center !important; } + .align-content-sm-between { + align-content: space-between !important; } + .align-content-sm-around { + align-content: space-around !important; } + .align-content-sm-stretch { + align-content: stretch !important; } + .align-self-sm-auto { + align-self: auto !important; } + .align-self-sm-start { + align-self: flex-start !important; } + .align-self-sm-end { + align-self: flex-end !important; } + .align-self-sm-center { + align-self: center !important; } + .align-self-sm-baseline { + align-self: baseline !important; } + .align-self-sm-stretch { + align-self: stretch !important; } + .order-sm-first { + order: -1 !important; } + .order-sm-0 { + order: 0 !important; } + .order-sm-1 { + order: 1 !important; } + .order-sm-2 { + order: 2 !important; } + .order-sm-3 { + order: 3 !important; } + .order-sm-4 { + order: 4 !important; } + .order-sm-5 { + order: 5 !important; } + .order-sm-last { + order: 6 !important; } + .m-sm-0 { + margin: 0 !important; } + .m-sm-1 { + margin: 0.25rem !important; } + .m-sm-2 { + margin: 0.5rem !important; } + .m-sm-3 { + margin: 1rem !important; } + .m-sm-4 { + margin: 1.5rem !important; } + .m-sm-5 { + margin: 3rem !important; } + .m-sm-auto { + margin: auto !important; } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-sm-0 { + margin-top: 0 !important; } + .mt-sm-1 { + margin-top: 0.25rem !important; } + .mt-sm-2 { + margin-top: 0.5rem !important; } + .mt-sm-3 { + margin-top: 1rem !important; } + .mt-sm-4 { + margin-top: 1.5rem !important; } + .mt-sm-5 { + margin-top: 3rem !important; } + .mt-sm-auto { + margin-top: auto !important; } + .me-sm-0 { + margin-right: 0 !important; } + .me-sm-1 { + margin-right: 0.25rem !important; } + .me-sm-2 { + margin-right: 0.5rem !important; } + .me-sm-3 { + margin-right: 1rem !important; } + .me-sm-4 { + margin-right: 1.5rem !important; } + .me-sm-5 { + margin-right: 3rem !important; } + .me-sm-auto { + margin-right: auto !important; } + .mb-sm-0 { + margin-bottom: 0 !important; } + .mb-sm-1 { + margin-bottom: 0.25rem !important; } + .mb-sm-2 { + margin-bottom: 0.5rem !important; } + .mb-sm-3 { + margin-bottom: 1rem !important; } + .mb-sm-4 { + margin-bottom: 1.5rem !important; } + .mb-sm-5 { + margin-bottom: 3rem !important; } + .mb-sm-auto { + margin-bottom: auto !important; } + .ms-sm-0 { + margin-left: 0 !important; } + .ms-sm-1 { + margin-left: 0.25rem !important; } + .ms-sm-2 { + margin-left: 0.5rem !important; } + .ms-sm-3 { + margin-left: 1rem !important; } + .ms-sm-4 { + margin-left: 1.5rem !important; } + .ms-sm-5 { + margin-left: 3rem !important; } + .ms-sm-auto { + margin-left: auto !important; } + .p-sm-0 { + padding: 0 !important; } + .p-sm-1 { + padding: 0.25rem !important; } + .p-sm-2 { + padding: 0.5rem !important; } + .p-sm-3 { + padding: 1rem !important; } + .p-sm-4 { + padding: 1.5rem !important; } + .p-sm-5 { + padding: 3rem !important; } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-sm-0 { + padding-top: 0 !important; } + .pt-sm-1 { + padding-top: 0.25rem !important; } + .pt-sm-2 { + padding-top: 0.5rem !important; } + .pt-sm-3 { + padding-top: 1rem !important; } + .pt-sm-4 { + padding-top: 1.5rem !important; } + .pt-sm-5 { + padding-top: 3rem !important; } + .pe-sm-0 { + padding-right: 0 !important; } + .pe-sm-1 { + padding-right: 0.25rem !important; } + .pe-sm-2 { + padding-right: 0.5rem !important; } + .pe-sm-3 { + padding-right: 1rem !important; } + .pe-sm-4 { + padding-right: 1.5rem !important; } + .pe-sm-5 { + padding-right: 3rem !important; } + .pb-sm-0 { + padding-bottom: 0 !important; } + .pb-sm-1 { + padding-bottom: 0.25rem !important; } + .pb-sm-2 { + padding-bottom: 0.5rem !important; } + .pb-sm-3 { + padding-bottom: 1rem !important; } + .pb-sm-4 { + padding-bottom: 1.5rem !important; } + .pb-sm-5 { + padding-bottom: 3rem !important; } + .ps-sm-0 { + padding-left: 0 !important; } + .ps-sm-1 { + padding-left: 0.25rem !important; } + .ps-sm-2 { + padding-left: 0.5rem !important; } + .ps-sm-3 { + padding-left: 1rem !important; } + .ps-sm-4 { + padding-left: 1.5rem !important; } + .ps-sm-5 { + padding-left: 3rem !important; } + .gap-sm-0 { + gap: 0 !important; } + .gap-sm-1 { + gap: 0.25rem !important; } + .gap-sm-2 { + gap: 0.5rem !important; } + .gap-sm-3 { + gap: 1rem !important; } + .gap-sm-4 { + gap: 1.5rem !important; } + .gap-sm-5 { + gap: 3rem !important; } + .row-gap-sm-0 { + row-gap: 0 !important; } + .row-gap-sm-1 { + row-gap: 0.25rem !important; } + .row-gap-sm-2 { + row-gap: 0.5rem !important; } + .row-gap-sm-3 { + row-gap: 1rem !important; } + .row-gap-sm-4 { + row-gap: 1.5rem !important; } + .row-gap-sm-5 { + row-gap: 3rem !important; } + .column-gap-sm-0 { + column-gap: 0 !important; } + .column-gap-sm-1 { + column-gap: 0.25rem !important; } + .column-gap-sm-2 { + column-gap: 0.5rem !important; } + .column-gap-sm-3 { + column-gap: 1rem !important; } + .column-gap-sm-4 { + column-gap: 1.5rem !important; } + .column-gap-sm-5 { + column-gap: 3rem !important; } + .text-sm-start { + text-align: left !important; } + .text-sm-end { + text-align: right !important; } + .text-sm-center { + text-align: center !important; } } + +@media (min-width: 768px) { + .float-md-start { + float: left !important; } + .float-md-end { + float: right !important; } + .float-md-none { + float: none !important; } + .object-fit-md-contain { + object-fit: contain !important; } + .object-fit-md-cover { + object-fit: cover !important; } + .object-fit-md-fill { + object-fit: fill !important; } + .object-fit-md-scale { + object-fit: scale-down !important; } + .object-fit-md-none { + object-fit: none !important; } + .d-md-inline { + display: inline !important; } + .d-md-inline-block { + display: inline-block !important; } + .d-md-block { + display: block !important; } + .d-md-grid { + display: grid !important; } + .d-md-inline-grid { + display: inline-grid !important; } + .d-md-table { + display: table !important; } + .d-md-table-row { + display: table-row !important; } + .d-md-table-cell { + display: table-cell !important; } + .d-md-flex { + display: flex !important; } + .d-md-inline-flex { + display: inline-flex !important; } + .d-md-none { + display: none !important; } + .flex-md-fill { + flex: 1 1 auto !important; } + .flex-md-row { + flex-direction: row !important; } + .flex-md-column { + flex-direction: column !important; } + .flex-md-row-reverse { + flex-direction: row-reverse !important; } + .flex-md-column-reverse { + flex-direction: column-reverse !important; } + .flex-md-grow-0 { + flex-grow: 0 !important; } + .flex-md-grow-1 { + flex-grow: 1 !important; } + .flex-md-shrink-0 { + flex-shrink: 0 !important; } + .flex-md-shrink-1 { + flex-shrink: 1 !important; } + .flex-md-wrap { + flex-wrap: wrap !important; } + .flex-md-nowrap { + flex-wrap: nowrap !important; } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-md-start { + justify-content: flex-start !important; } + .justify-content-md-end { + justify-content: flex-end !important; } + .justify-content-md-center { + justify-content: center !important; } + .justify-content-md-between { + justify-content: space-between !important; } + .justify-content-md-around { + justify-content: space-around !important; } + .justify-content-md-evenly { + justify-content: space-evenly !important; } + .align-items-md-start { + align-items: flex-start !important; } + .align-items-md-end { + align-items: flex-end !important; } + .align-items-md-center { + align-items: center !important; } + .align-items-md-baseline { + align-items: baseline !important; } + .align-items-md-stretch { + align-items: stretch !important; } + .align-content-md-start { + align-content: flex-start !important; } + .align-content-md-end { + align-content: flex-end !important; } + .align-content-md-center { + align-content: center !important; } + .align-content-md-between { + align-content: space-between !important; } + .align-content-md-around { + align-content: space-around !important; } + .align-content-md-stretch { + align-content: stretch !important; } + .align-self-md-auto { + align-self: auto !important; } + .align-self-md-start { + align-self: flex-start !important; } + .align-self-md-end { + align-self: flex-end !important; } + .align-self-md-center { + align-self: center !important; } + .align-self-md-baseline { + align-self: baseline !important; } + .align-self-md-stretch { + align-self: stretch !important; } + .order-md-first { + order: -1 !important; } + .order-md-0 { + order: 0 !important; } + .order-md-1 { + order: 1 !important; } + .order-md-2 { + order: 2 !important; } + .order-md-3 { + order: 3 !important; } + .order-md-4 { + order: 4 !important; } + .order-md-5 { + order: 5 !important; } + .order-md-last { + order: 6 !important; } + .m-md-0 { + margin: 0 !important; } + .m-md-1 { + margin: 0.25rem !important; } + .m-md-2 { + margin: 0.5rem !important; } + .m-md-3 { + margin: 1rem !important; } + .m-md-4 { + margin: 1.5rem !important; } + .m-md-5 { + margin: 3rem !important; } + .m-md-auto { + margin: auto !important; } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-md-0 { + margin-top: 0 !important; } + .mt-md-1 { + margin-top: 0.25rem !important; } + .mt-md-2 { + margin-top: 0.5rem !important; } + .mt-md-3 { + margin-top: 1rem !important; } + .mt-md-4 { + margin-top: 1.5rem !important; } + .mt-md-5 { + margin-top: 3rem !important; } + .mt-md-auto { + margin-top: auto !important; } + .me-md-0 { + margin-right: 0 !important; } + .me-md-1 { + margin-right: 0.25rem !important; } + .me-md-2 { + margin-right: 0.5rem !important; } + .me-md-3 { + margin-right: 1rem !important; } + .me-md-4 { + margin-right: 1.5rem !important; } + .me-md-5 { + margin-right: 3rem !important; } + .me-md-auto { + margin-right: auto !important; } + .mb-md-0 { + margin-bottom: 0 !important; } + .mb-md-1 { + margin-bottom: 0.25rem !important; } + .mb-md-2 { + margin-bottom: 0.5rem !important; } + .mb-md-3 { + margin-bottom: 1rem !important; } + .mb-md-4 { + margin-bottom: 1.5rem !important; } + .mb-md-5 { + margin-bottom: 3rem !important; } + .mb-md-auto { + margin-bottom: auto !important; } + .ms-md-0 { + margin-left: 0 !important; } + .ms-md-1 { + margin-left: 0.25rem !important; } + .ms-md-2 { + margin-left: 0.5rem !important; } + .ms-md-3 { + margin-left: 1rem !important; } + .ms-md-4 { + margin-left: 1.5rem !important; } + .ms-md-5 { + margin-left: 3rem !important; } + .ms-md-auto { + margin-left: auto !important; } + .p-md-0 { + padding: 0 !important; } + .p-md-1 { + padding: 0.25rem !important; } + .p-md-2 { + padding: 0.5rem !important; } + .p-md-3 { + padding: 1rem !important; } + .p-md-4 { + padding: 1.5rem !important; } + .p-md-5 { + padding: 3rem !important; } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-md-0 { + padding-top: 0 !important; } + .pt-md-1 { + padding-top: 0.25rem !important; } + .pt-md-2 { + padding-top: 0.5rem !important; } + .pt-md-3 { + padding-top: 1rem !important; } + .pt-md-4 { + padding-top: 1.5rem !important; } + .pt-md-5 { + padding-top: 3rem !important; } + .pe-md-0 { + padding-right: 0 !important; } + .pe-md-1 { + padding-right: 0.25rem !important; } + .pe-md-2 { + padding-right: 0.5rem !important; } + .pe-md-3 { + padding-right: 1rem !important; } + .pe-md-4 { + padding-right: 1.5rem !important; } + .pe-md-5 { + padding-right: 3rem !important; } + .pb-md-0 { + padding-bottom: 0 !important; } + .pb-md-1 { + padding-bottom: 0.25rem !important; } + .pb-md-2 { + padding-bottom: 0.5rem !important; } + .pb-md-3 { + padding-bottom: 1rem !important; } + .pb-md-4 { + padding-bottom: 1.5rem !important; } + .pb-md-5 { + padding-bottom: 3rem !important; } + .ps-md-0 { + padding-left: 0 !important; } + .ps-md-1 { + padding-left: 0.25rem !important; } + .ps-md-2 { + padding-left: 0.5rem !important; } + .ps-md-3 { + padding-left: 1rem !important; } + .ps-md-4 { + padding-left: 1.5rem !important; } + .ps-md-5 { + padding-left: 3rem !important; } + .gap-md-0 { + gap: 0 !important; } + .gap-md-1 { + gap: 0.25rem !important; } + .gap-md-2 { + gap: 0.5rem !important; } + .gap-md-3 { + gap: 1rem !important; } + .gap-md-4 { + gap: 1.5rem !important; } + .gap-md-5 { + gap: 3rem !important; } + .row-gap-md-0 { + row-gap: 0 !important; } + .row-gap-md-1 { + row-gap: 0.25rem !important; } + .row-gap-md-2 { + row-gap: 0.5rem !important; } + .row-gap-md-3 { + row-gap: 1rem !important; } + .row-gap-md-4 { + row-gap: 1.5rem !important; } + .row-gap-md-5 { + row-gap: 3rem !important; } + .column-gap-md-0 { + column-gap: 0 !important; } + .column-gap-md-1 { + column-gap: 0.25rem !important; } + .column-gap-md-2 { + column-gap: 0.5rem !important; } + .column-gap-md-3 { + column-gap: 1rem !important; } + .column-gap-md-4 { + column-gap: 1.5rem !important; } + .column-gap-md-5 { + column-gap: 3rem !important; } + .text-md-start { + text-align: left !important; } + .text-md-end { + text-align: right !important; } + .text-md-center { + text-align: center !important; } } + +@media (min-width: 992px) { + .float-lg-start { + float: left !important; } + .float-lg-end { + float: right !important; } + .float-lg-none { + float: none !important; } + .object-fit-lg-contain { + object-fit: contain !important; } + .object-fit-lg-cover { + object-fit: cover !important; } + .object-fit-lg-fill { + object-fit: fill !important; } + .object-fit-lg-scale { + object-fit: scale-down !important; } + .object-fit-lg-none { + object-fit: none !important; } + .d-lg-inline { + display: inline !important; } + .d-lg-inline-block { + display: inline-block !important; } + .d-lg-block { + display: block !important; } + .d-lg-grid { + display: grid !important; } + .d-lg-inline-grid { + display: inline-grid !important; } + .d-lg-table { + display: table !important; } + .d-lg-table-row { + display: table-row !important; } + .d-lg-table-cell { + display: table-cell !important; } + .d-lg-flex { + display: flex !important; } + .d-lg-inline-flex { + display: inline-flex !important; } + .d-lg-none { + display: none !important; } + .flex-lg-fill { + flex: 1 1 auto !important; } + .flex-lg-row { + flex-direction: row !important; } + .flex-lg-column { + flex-direction: column !important; } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; } + .flex-lg-grow-0 { + flex-grow: 0 !important; } + .flex-lg-grow-1 { + flex-grow: 1 !important; } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; } + .flex-lg-wrap { + flex-wrap: wrap !important; } + .flex-lg-nowrap { + flex-wrap: nowrap !important; } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-lg-start { + justify-content: flex-start !important; } + .justify-content-lg-end { + justify-content: flex-end !important; } + .justify-content-lg-center { + justify-content: center !important; } + .justify-content-lg-between { + justify-content: space-between !important; } + .justify-content-lg-around { + justify-content: space-around !important; } + .justify-content-lg-evenly { + justify-content: space-evenly !important; } + .align-items-lg-start { + align-items: flex-start !important; } + .align-items-lg-end { + align-items: flex-end !important; } + .align-items-lg-center { + align-items: center !important; } + .align-items-lg-baseline { + align-items: baseline !important; } + .align-items-lg-stretch { + align-items: stretch !important; } + .align-content-lg-start { + align-content: flex-start !important; } + .align-content-lg-end { + align-content: flex-end !important; } + .align-content-lg-center { + align-content: center !important; } + .align-content-lg-between { + align-content: space-between !important; } + .align-content-lg-around { + align-content: space-around !important; } + .align-content-lg-stretch { + align-content: stretch !important; } + .align-self-lg-auto { + align-self: auto !important; } + .align-self-lg-start { + align-self: flex-start !important; } + .align-self-lg-end { + align-self: flex-end !important; } + .align-self-lg-center { + align-self: center !important; } + .align-self-lg-baseline { + align-self: baseline !important; } + .align-self-lg-stretch { + align-self: stretch !important; } + .order-lg-first { + order: -1 !important; } + .order-lg-0 { + order: 0 !important; } + .order-lg-1 { + order: 1 !important; } + .order-lg-2 { + order: 2 !important; } + .order-lg-3 { + order: 3 !important; } + .order-lg-4 { + order: 4 !important; } + .order-lg-5 { + order: 5 !important; } + .order-lg-last { + order: 6 !important; } + .m-lg-0 { + margin: 0 !important; } + .m-lg-1 { + margin: 0.25rem !important; } + .m-lg-2 { + margin: 0.5rem !important; } + .m-lg-3 { + margin: 1rem !important; } + .m-lg-4 { + margin: 1.5rem !important; } + .m-lg-5 { + margin: 3rem !important; } + .m-lg-auto { + margin: auto !important; } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-lg-0 { + margin-top: 0 !important; } + .mt-lg-1 { + margin-top: 0.25rem !important; } + .mt-lg-2 { + margin-top: 0.5rem !important; } + .mt-lg-3 { + margin-top: 1rem !important; } + .mt-lg-4 { + margin-top: 1.5rem !important; } + .mt-lg-5 { + margin-top: 3rem !important; } + .mt-lg-auto { + margin-top: auto !important; } + .me-lg-0 { + margin-right: 0 !important; } + .me-lg-1 { + margin-right: 0.25rem !important; } + .me-lg-2 { + margin-right: 0.5rem !important; } + .me-lg-3 { + margin-right: 1rem !important; } + .me-lg-4 { + margin-right: 1.5rem !important; } + .me-lg-5 { + margin-right: 3rem !important; } + .me-lg-auto { + margin-right: auto !important; } + .mb-lg-0 { + margin-bottom: 0 !important; } + .mb-lg-1 { + margin-bottom: 0.25rem !important; } + .mb-lg-2 { + margin-bottom: 0.5rem !important; } + .mb-lg-3 { + margin-bottom: 1rem !important; } + .mb-lg-4 { + margin-bottom: 1.5rem !important; } + .mb-lg-5 { + margin-bottom: 3rem !important; } + .mb-lg-auto { + margin-bottom: auto !important; } + .ms-lg-0 { + margin-left: 0 !important; } + .ms-lg-1 { + margin-left: 0.25rem !important; } + .ms-lg-2 { + margin-left: 0.5rem !important; } + .ms-lg-3 { + margin-left: 1rem !important; } + .ms-lg-4 { + margin-left: 1.5rem !important; } + .ms-lg-5 { + margin-left: 3rem !important; } + .ms-lg-auto { + margin-left: auto !important; } + .p-lg-0 { + padding: 0 !important; } + .p-lg-1 { + padding: 0.25rem !important; } + .p-lg-2 { + padding: 0.5rem !important; } + .p-lg-3 { + padding: 1rem !important; } + .p-lg-4 { + padding: 1.5rem !important; } + .p-lg-5 { + padding: 3rem !important; } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-lg-0 { + padding-top: 0 !important; } + .pt-lg-1 { + padding-top: 0.25rem !important; } + .pt-lg-2 { + padding-top: 0.5rem !important; } + .pt-lg-3 { + padding-top: 1rem !important; } + .pt-lg-4 { + padding-top: 1.5rem !important; } + .pt-lg-5 { + padding-top: 3rem !important; } + .pe-lg-0 { + padding-right: 0 !important; } + .pe-lg-1 { + padding-right: 0.25rem !important; } + .pe-lg-2 { + padding-right: 0.5rem !important; } + .pe-lg-3 { + padding-right: 1rem !important; } + .pe-lg-4 { + padding-right: 1.5rem !important; } + .pe-lg-5 { + padding-right: 3rem !important; } + .pb-lg-0 { + padding-bottom: 0 !important; } + .pb-lg-1 { + padding-bottom: 0.25rem !important; } + .pb-lg-2 { + padding-bottom: 0.5rem !important; } + .pb-lg-3 { + padding-bottom: 1rem !important; } + .pb-lg-4 { + padding-bottom: 1.5rem !important; } + .pb-lg-5 { + padding-bottom: 3rem !important; } + .ps-lg-0 { + padding-left: 0 !important; } + .ps-lg-1 { + padding-left: 0.25rem !important; } + .ps-lg-2 { + padding-left: 0.5rem !important; } + .ps-lg-3 { + padding-left: 1rem !important; } + .ps-lg-4 { + padding-left: 1.5rem !important; } + .ps-lg-5 { + padding-left: 3rem !important; } + .gap-lg-0 { + gap: 0 !important; } + .gap-lg-1 { + gap: 0.25rem !important; } + .gap-lg-2 { + gap: 0.5rem !important; } + .gap-lg-3 { + gap: 1rem !important; } + .gap-lg-4 { + gap: 1.5rem !important; } + .gap-lg-5 { + gap: 3rem !important; } + .row-gap-lg-0 { + row-gap: 0 !important; } + .row-gap-lg-1 { + row-gap: 0.25rem !important; } + .row-gap-lg-2 { + row-gap: 0.5rem !important; } + .row-gap-lg-3 { + row-gap: 1rem !important; } + .row-gap-lg-4 { + row-gap: 1.5rem !important; } + .row-gap-lg-5 { + row-gap: 3rem !important; } + .column-gap-lg-0 { + column-gap: 0 !important; } + .column-gap-lg-1 { + column-gap: 0.25rem !important; } + .column-gap-lg-2 { + column-gap: 0.5rem !important; } + .column-gap-lg-3 { + column-gap: 1rem !important; } + .column-gap-lg-4 { + column-gap: 1.5rem !important; } + .column-gap-lg-5 { + column-gap: 3rem !important; } + .text-lg-start { + text-align: left !important; } + .text-lg-end { + text-align: right !important; } + .text-lg-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; } + .float-xl-end { + float: right !important; } + .float-xl-none { + float: none !important; } + .object-fit-xl-contain { + object-fit: contain !important; } + .object-fit-xl-cover { + object-fit: cover !important; } + .object-fit-xl-fill { + object-fit: fill !important; } + .object-fit-xl-scale { + object-fit: scale-down !important; } + .object-fit-xl-none { + object-fit: none !important; } + .d-xl-inline { + display: inline !important; } + .d-xl-inline-block { + display: inline-block !important; } + .d-xl-block { + display: block !important; } + .d-xl-grid { + display: grid !important; } + .d-xl-inline-grid { + display: inline-grid !important; } + .d-xl-table { + display: table !important; } + .d-xl-table-row { + display: table-row !important; } + .d-xl-table-cell { + display: table-cell !important; } + .d-xl-flex { + display: flex !important; } + .d-xl-inline-flex { + display: inline-flex !important; } + .d-xl-none { + display: none !important; } + .flex-xl-fill { + flex: 1 1 auto !important; } + .flex-xl-row { + flex-direction: row !important; } + .flex-xl-column { + flex-direction: column !important; } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; } + .flex-xl-grow-0 { + flex-grow: 0 !important; } + .flex-xl-grow-1 { + flex-grow: 1 !important; } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; } + .flex-xl-wrap { + flex-wrap: wrap !important; } + .flex-xl-nowrap { + flex-wrap: nowrap !important; } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-xl-start { + justify-content: flex-start !important; } + .justify-content-xl-end { + justify-content: flex-end !important; } + .justify-content-xl-center { + justify-content: center !important; } + .justify-content-xl-between { + justify-content: space-between !important; } + .justify-content-xl-around { + justify-content: space-around !important; } + .justify-content-xl-evenly { + justify-content: space-evenly !important; } + .align-items-xl-start { + align-items: flex-start !important; } + .align-items-xl-end { + align-items: flex-end !important; } + .align-items-xl-center { + align-items: center !important; } + .align-items-xl-baseline { + align-items: baseline !important; } + .align-items-xl-stretch { + align-items: stretch !important; } + .align-content-xl-start { + align-content: flex-start !important; } + .align-content-xl-end { + align-content: flex-end !important; } + .align-content-xl-center { + align-content: center !important; } + .align-content-xl-between { + align-content: space-between !important; } + .align-content-xl-around { + align-content: space-around !important; } + .align-content-xl-stretch { + align-content: stretch !important; } + .align-self-xl-auto { + align-self: auto !important; } + .align-self-xl-start { + align-self: flex-start !important; } + .align-self-xl-end { + align-self: flex-end !important; } + .align-self-xl-center { + align-self: center !important; } + .align-self-xl-baseline { + align-self: baseline !important; } + .align-self-xl-stretch { + align-self: stretch !important; } + .order-xl-first { + order: -1 !important; } + .order-xl-0 { + order: 0 !important; } + .order-xl-1 { + order: 1 !important; } + .order-xl-2 { + order: 2 !important; } + .order-xl-3 { + order: 3 !important; } + .order-xl-4 { + order: 4 !important; } + .order-xl-5 { + order: 5 !important; } + .order-xl-last { + order: 6 !important; } + .m-xl-0 { + margin: 0 !important; } + .m-xl-1 { + margin: 0.25rem !important; } + .m-xl-2 { + margin: 0.5rem !important; } + .m-xl-3 { + margin: 1rem !important; } + .m-xl-4 { + margin: 1.5rem !important; } + .m-xl-5 { + margin: 3rem !important; } + .m-xl-auto { + margin: auto !important; } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xl-0 { + margin-top: 0 !important; } + .mt-xl-1 { + margin-top: 0.25rem !important; } + .mt-xl-2 { + margin-top: 0.5rem !important; } + .mt-xl-3 { + margin-top: 1rem !important; } + .mt-xl-4 { + margin-top: 1.5rem !important; } + .mt-xl-5 { + margin-top: 3rem !important; } + .mt-xl-auto { + margin-top: auto !important; } + .me-xl-0 { + margin-right: 0 !important; } + .me-xl-1 { + margin-right: 0.25rem !important; } + .me-xl-2 { + margin-right: 0.5rem !important; } + .me-xl-3 { + margin-right: 1rem !important; } + .me-xl-4 { + margin-right: 1.5rem !important; } + .me-xl-5 { + margin-right: 3rem !important; } + .me-xl-auto { + margin-right: auto !important; } + .mb-xl-0 { + margin-bottom: 0 !important; } + .mb-xl-1 { + margin-bottom: 0.25rem !important; } + .mb-xl-2 { + margin-bottom: 0.5rem !important; } + .mb-xl-3 { + margin-bottom: 1rem !important; } + .mb-xl-4 { + margin-bottom: 1.5rem !important; } + .mb-xl-5 { + margin-bottom: 3rem !important; } + .mb-xl-auto { + margin-bottom: auto !important; } + .ms-xl-0 { + margin-left: 0 !important; } + .ms-xl-1 { + margin-left: 0.25rem !important; } + .ms-xl-2 { + margin-left: 0.5rem !important; } + .ms-xl-3 { + margin-left: 1rem !important; } + .ms-xl-4 { + margin-left: 1.5rem !important; } + .ms-xl-5 { + margin-left: 3rem !important; } + .ms-xl-auto { + margin-left: auto !important; } + .p-xl-0 { + padding: 0 !important; } + .p-xl-1 { + padding: 0.25rem !important; } + .p-xl-2 { + padding: 0.5rem !important; } + .p-xl-3 { + padding: 1rem !important; } + .p-xl-4 { + padding: 1.5rem !important; } + .p-xl-5 { + padding: 3rem !important; } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xl-0 { + padding-top: 0 !important; } + .pt-xl-1 { + padding-top: 0.25rem !important; } + .pt-xl-2 { + padding-top: 0.5rem !important; } + .pt-xl-3 { + padding-top: 1rem !important; } + .pt-xl-4 { + padding-top: 1.5rem !important; } + .pt-xl-5 { + padding-top: 3rem !important; } + .pe-xl-0 { + padding-right: 0 !important; } + .pe-xl-1 { + padding-right: 0.25rem !important; } + .pe-xl-2 { + padding-right: 0.5rem !important; } + .pe-xl-3 { + padding-right: 1rem !important; } + .pe-xl-4 { + padding-right: 1.5rem !important; } + .pe-xl-5 { + padding-right: 3rem !important; } + .pb-xl-0 { + padding-bottom: 0 !important; } + .pb-xl-1 { + padding-bottom: 0.25rem !important; } + .pb-xl-2 { + padding-bottom: 0.5rem !important; } + .pb-xl-3 { + padding-bottom: 1rem !important; } + .pb-xl-4 { + padding-bottom: 1.5rem !important; } + .pb-xl-5 { + padding-bottom: 3rem !important; } + .ps-xl-0 { + padding-left: 0 !important; } + .ps-xl-1 { + padding-left: 0.25rem !important; } + .ps-xl-2 { + padding-left: 0.5rem !important; } + .ps-xl-3 { + padding-left: 1rem !important; } + .ps-xl-4 { + padding-left: 1.5rem !important; } + .ps-xl-5 { + padding-left: 3rem !important; } + .gap-xl-0 { + gap: 0 !important; } + .gap-xl-1 { + gap: 0.25rem !important; } + .gap-xl-2 { + gap: 0.5rem !important; } + .gap-xl-3 { + gap: 1rem !important; } + .gap-xl-4 { + gap: 1.5rem !important; } + .gap-xl-5 { + gap: 3rem !important; } + .row-gap-xl-0 { + row-gap: 0 !important; } + .row-gap-xl-1 { + row-gap: 0.25rem !important; } + .row-gap-xl-2 { + row-gap: 0.5rem !important; } + .row-gap-xl-3 { + row-gap: 1rem !important; } + .row-gap-xl-4 { + row-gap: 1.5rem !important; } + .row-gap-xl-5 { + row-gap: 3rem !important; } + .column-gap-xl-0 { + column-gap: 0 !important; } + .column-gap-xl-1 { + column-gap: 0.25rem !important; } + .column-gap-xl-2 { + column-gap: 0.5rem !important; } + .column-gap-xl-3 { + column-gap: 1rem !important; } + .column-gap-xl-4 { + column-gap: 1.5rem !important; } + .column-gap-xl-5 { + column-gap: 3rem !important; } + .text-xl-start { + text-align: left !important; } + .text-xl-end { + text-align: right !important; } + .text-xl-center { + text-align: center !important; } } + +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; } + .float-xxl-end { + float: right !important; } + .float-xxl-none { + float: none !important; } + .object-fit-xxl-contain { + object-fit: contain !important; } + .object-fit-xxl-cover { + object-fit: cover !important; } + .object-fit-xxl-fill { + object-fit: fill !important; } + .object-fit-xxl-scale { + object-fit: scale-down !important; } + .object-fit-xxl-none { + object-fit: none !important; } + .d-xxl-inline { + display: inline !important; } + .d-xxl-inline-block { + display: inline-block !important; } + .d-xxl-block { + display: block !important; } + .d-xxl-grid { + display: grid !important; } + .d-xxl-inline-grid { + display: inline-grid !important; } + .d-xxl-table { + display: table !important; } + .d-xxl-table-row { + display: table-row !important; } + .d-xxl-table-cell { + display: table-cell !important; } + .d-xxl-flex { + display: flex !important; } + .d-xxl-inline-flex { + display: inline-flex !important; } + .d-xxl-none { + display: none !important; } + .flex-xxl-fill { + flex: 1 1 auto !important; } + .flex-xxl-row { + flex-direction: row !important; } + .flex-xxl-column { + flex-direction: column !important; } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; } + .flex-xxl-grow-0 { + flex-grow: 0 !important; } + .flex-xxl-grow-1 { + flex-grow: 1 !important; } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; } + .flex-xxl-wrap { + flex-wrap: wrap !important; } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; } + .justify-content-xxl-start { + justify-content: flex-start !important; } + .justify-content-xxl-end { + justify-content: flex-end !important; } + .justify-content-xxl-center { + justify-content: center !important; } + .justify-content-xxl-between { + justify-content: space-between !important; } + .justify-content-xxl-around { + justify-content: space-around !important; } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; } + .align-items-xxl-start { + align-items: flex-start !important; } + .align-items-xxl-end { + align-items: flex-end !important; } + .align-items-xxl-center { + align-items: center !important; } + .align-items-xxl-baseline { + align-items: baseline !important; } + .align-items-xxl-stretch { + align-items: stretch !important; } + .align-content-xxl-start { + align-content: flex-start !important; } + .align-content-xxl-end { + align-content: flex-end !important; } + .align-content-xxl-center { + align-content: center !important; } + .align-content-xxl-between { + align-content: space-between !important; } + .align-content-xxl-around { + align-content: space-around !important; } + .align-content-xxl-stretch { + align-content: stretch !important; } + .align-self-xxl-auto { + align-self: auto !important; } + .align-self-xxl-start { + align-self: flex-start !important; } + .align-self-xxl-end { + align-self: flex-end !important; } + .align-self-xxl-center { + align-self: center !important; } + .align-self-xxl-baseline { + align-self: baseline !important; } + .align-self-xxl-stretch { + align-self: stretch !important; } + .order-xxl-first { + order: -1 !important; } + .order-xxl-0 { + order: 0 !important; } + .order-xxl-1 { + order: 1 !important; } + .order-xxl-2 { + order: 2 !important; } + .order-xxl-3 { + order: 3 !important; } + .order-xxl-4 { + order: 4 !important; } + .order-xxl-5 { + order: 5 !important; } + .order-xxl-last { + order: 6 !important; } + .m-xxl-0 { + margin: 0 !important; } + .m-xxl-1 { + margin: 0.25rem !important; } + .m-xxl-2 { + margin: 0.5rem !important; } + .m-xxl-3 { + margin: 1rem !important; } + .m-xxl-4 { + margin: 1.5rem !important; } + .m-xxl-5 { + margin: 3rem !important; } + .m-xxl-auto { + margin: auto !important; } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; } + .mt-xxl-0 { + margin-top: 0 !important; } + .mt-xxl-1 { + margin-top: 0.25rem !important; } + .mt-xxl-2 { + margin-top: 0.5rem !important; } + .mt-xxl-3 { + margin-top: 1rem !important; } + .mt-xxl-4 { + margin-top: 1.5rem !important; } + .mt-xxl-5 { + margin-top: 3rem !important; } + .mt-xxl-auto { + margin-top: auto !important; } + .me-xxl-0 { + margin-right: 0 !important; } + .me-xxl-1 { + margin-right: 0.25rem !important; } + .me-xxl-2 { + margin-right: 0.5rem !important; } + .me-xxl-3 { + margin-right: 1rem !important; } + .me-xxl-4 { + margin-right: 1.5rem !important; } + .me-xxl-5 { + margin-right: 3rem !important; } + .me-xxl-auto { + margin-right: auto !important; } + .mb-xxl-0 { + margin-bottom: 0 !important; } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; } + .mb-xxl-3 { + margin-bottom: 1rem !important; } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; } + .mb-xxl-5 { + margin-bottom: 3rem !important; } + .mb-xxl-auto { + margin-bottom: auto !important; } + .ms-xxl-0 { + margin-left: 0 !important; } + .ms-xxl-1 { + margin-left: 0.25rem !important; } + .ms-xxl-2 { + margin-left: 0.5rem !important; } + .ms-xxl-3 { + margin-left: 1rem !important; } + .ms-xxl-4 { + margin-left: 1.5rem !important; } + .ms-xxl-5 { + margin-left: 3rem !important; } + .ms-xxl-auto { + margin-left: auto !important; } + .p-xxl-0 { + padding: 0 !important; } + .p-xxl-1 { + padding: 0.25rem !important; } + .p-xxl-2 { + padding: 0.5rem !important; } + .p-xxl-3 { + padding: 1rem !important; } + .p-xxl-4 { + padding: 1.5rem !important; } + .p-xxl-5 { + padding: 3rem !important; } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; } + .pt-xxl-0 { + padding-top: 0 !important; } + .pt-xxl-1 { + padding-top: 0.25rem !important; } + .pt-xxl-2 { + padding-top: 0.5rem !important; } + .pt-xxl-3 { + padding-top: 1rem !important; } + .pt-xxl-4 { + padding-top: 1.5rem !important; } + .pt-xxl-5 { + padding-top: 3rem !important; } + .pe-xxl-0 { + padding-right: 0 !important; } + .pe-xxl-1 { + padding-right: 0.25rem !important; } + .pe-xxl-2 { + padding-right: 0.5rem !important; } + .pe-xxl-3 { + padding-right: 1rem !important; } + .pe-xxl-4 { + padding-right: 1.5rem !important; } + .pe-xxl-5 { + padding-right: 3rem !important; } + .pb-xxl-0 { + padding-bottom: 0 !important; } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; } + .pb-xxl-3 { + padding-bottom: 1rem !important; } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; } + .pb-xxl-5 { + padding-bottom: 3rem !important; } + .ps-xxl-0 { + padding-left: 0 !important; } + .ps-xxl-1 { + padding-left: 0.25rem !important; } + .ps-xxl-2 { + padding-left: 0.5rem !important; } + .ps-xxl-3 { + padding-left: 1rem !important; } + .ps-xxl-4 { + padding-left: 1.5rem !important; } + .ps-xxl-5 { + padding-left: 3rem !important; } + .gap-xxl-0 { + gap: 0 !important; } + .gap-xxl-1 { + gap: 0.25rem !important; } + .gap-xxl-2 { + gap: 0.5rem !important; } + .gap-xxl-3 { + gap: 1rem !important; } + .gap-xxl-4 { + gap: 1.5rem !important; } + .gap-xxl-5 { + gap: 3rem !important; } + .row-gap-xxl-0 { + row-gap: 0 !important; } + .row-gap-xxl-1 { + row-gap: 0.25rem !important; } + .row-gap-xxl-2 { + row-gap: 0.5rem !important; } + .row-gap-xxl-3 { + row-gap: 1rem !important; } + .row-gap-xxl-4 { + row-gap: 1.5rem !important; } + .row-gap-xxl-5 { + row-gap: 3rem !important; } + .column-gap-xxl-0 { + column-gap: 0 !important; } + .column-gap-xxl-1 { + column-gap: 0.25rem !important; } + .column-gap-xxl-2 { + column-gap: 0.5rem !important; } + .column-gap-xxl-3 { + column-gap: 1rem !important; } + .column-gap-xxl-4 { + column-gap: 1.5rem !important; } + .column-gap-xxl-5 { + column-gap: 3rem !important; } + .text-xxl-start { + text-align: left !important; } + .text-xxl-end { + text-align: right !important; } + .text-xxl-center { + text-align: center !important; } } + +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; } + .fs-2 { + font-size: 2rem !important; } + .fs-3 { + font-size: 1.75rem !important; } + .fs-4 { + font-size: 1.5rem !important; } } + +@media print { + .d-print-inline { + display: inline !important; } + .d-print-inline-block { + display: inline-block !important; } + .d-print-block { + display: block !important; } + .d-print-grid { + display: grid !important; } + .d-print-inline-grid { + display: inline-grid !important; } + .d-print-table { + display: table !important; } + .d-print-table-row { + display: table-row !important; } + .d-print-table-cell { + display: table-cell !important; } + .d-print-flex { + display: flex !important; } + .d-print-inline-flex { + display: inline-flex !important; } + .d-print-none { + display: none !important; } } + +html { + font-family: "Poppins", sans-serif; + font-size: 1.125rem; + font-weight: 400; + line-height: 1.75; + scroll-behavior: smooth; } + @media (max-width: 991px) { + html { + font-size: 1rem; } } +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + +p { + margin-bottom: 0.25rem; } + +ul { + margin-bottom: 0; } + +a, +a:hover, +a:focus { + text-decoration: none; } + +a, +button, +select { + cursor: pointer; + transition: 0.2s ease; } + a:focus, + button:focus, + select:focus { + outline: 0; } + +a:hover { + color: #18b0a2; } + +h1, .h1, +h2, +.h2, +h3, +.h3, +h4, +.h4, +h5, +.h5 { + font-family: "Poppins", sans-serif; + font-weight: 700; + color: #fff; } + +small, +.small { + font-size: 85%; } +h5, +.h5 { + font-size: 25.4016px; + line-height: calc(2px + 2ex + 2px); + margin-bottom: 0.65em; } + @media (max-width: 991px) { + h5:not(h5, .h5, h6, .h6), + .h5:not(h5, .h5, h6, .h6) { + font-size: calc(25.4016px * 0.9); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h5:not(h5, .h5, h6, .h6), + .h5:not(h5, .h5, h6, .h6) { + font-size: calc(25.4016px * 0.8); } } + @media (max-width: 991px) { + h5, + .h5 { + font-size: calc(25.4016px * 0.95); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h5, + .h5 { + font-size: calc(25.4016px * 0.9); } } +h4, +.h4 { + font-size: 32.006016px; + line-height: calc(2px + 2ex + 2px); + margin-bottom: 0.65em; } + @media (max-width: 991px) { + h4:not(h5, .h5, h6, .h6), + .h4:not(h5, .h5, h6, .h6) { + font-size: calc(32.006016px * 0.9); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h4:not(h5, .h5, h6, .h6), + .h4:not(h5, .h5, h6, .h6) { + font-size: calc(32.006016px * 0.8); } } + @media (max-width: 991px) { + h4, + .h4 { + font-size: calc(32.006016px * 0.95); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h4, + .h4 { + font-size: calc(32.006016px * 0.9); } } +h3, +.h3 { + font-size: 40.32758016px; + line-height: calc(2px + 2ex + 2px); + margin-bottom: 0.65em; } + @media (max-width: 991px) { + h3:not(h5, .h5, h6, .h6), + .h3:not(h5, .h5, h6, .h6) { + font-size: calc(40.32758016px * 0.9); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h3:not(h5, .h5, h6, .h6), + .h3:not(h5, .h5, h6, .h6) { + font-size: calc(40.32758016px * 0.8); } } + @media (max-width: 991px) { + h3, + .h3 { + font-size: calc(40.32758016px * 0.95); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h3, + .h3 { + font-size: calc(40.32758016px * 0.9); } } +h2, +.h2 { + font-size: 50.812751px; + line-height: calc(2px + 2ex + 2px); + margin-bottom: 0.65em; } + @media (max-width: 991px) { + h2:not(h5, .h5, h6, .h6), + .h2:not(h5, .h5, h6, .h6) { + font-size: calc(50.812751px * 0.9); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h2:not(h5, .h5, h6, .h6), + .h2:not(h5, .h5, h6, .h6) { + font-size: calc(50.812751px * 0.8); } } + @media (max-width: 991px) { + h2, + .h2 { + font-size: calc(50.812751px * 0.95); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h2, + .h2 { + font-size: calc(50.812751px * 0.9); } } +h1, +.h1 { + font-size: 64.02406626px; + line-height: calc(2px + 2ex + 2px); + margin-bottom: 0.65em; } + @media (max-width: 991px) { + h1:not(h5, .h5, h6, .h6), + .h1:not(h5, .h5, h6, .h6) { + font-size: calc(64.02406626px * 0.9); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h1:not(h5, .h5, h6, .h6), + .h1:not(h5, .h5, h6, .h6) { + font-size: calc(64.02406626px * 0.8); } } + @media (max-width: 991px) { + h1, + .h1 { + font-size: calc(64.02406626px * 0.95); + margin-bottom: 0.55em; } } + @media (max-width: 767px) { + h1, + .h1 { + font-size: calc(64.02406626px * 0.9); } } +html.light { + color: #555; } + html.light h1, html.light .h1, + html.light h2, + html.light .h2, + html.light h3, + html.light .h3, + html.light h4, + html.light .h4, + html.light h5, + html.light .h5 { + color: #222222; } + +/* Button style */ +.btn { + font-size: 0.9rem; + padding: 0.7rem 1.25rem; + position: relative; + overflow: hidden; + z-index: 1; + transition: 0.3s; } + .btn:hover, .btn:active, .btn.active, .btn:focus, .btn.focus { + outline: 0; + box-shadow: none !important; + background-color: transparent !important; } + +.btn-primary { + color: #fff; + border-color: #18b0a2 !important; + background-color: #18b0a2; } + .btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary:focus, .btn-primary.focus { + color: #fff; + border-color: #18b0a2 !important; + background-color: #18b0a2 !important; } + .btn-primary:hover::before, .btn-primary:active::before, .btn-primary.active::before, .btn-primary:focus::before, .btn-primary.focus::before { + height: 200%; + bottom: -25px; } + .btn-primary::before { + content: ""; + width: 100%; + height: 100%; + position: absolute; + bottom: -70px; + left: 0; + z-index: -1; + transition: 0.35s cubic-bezier(0.65, 0.05, 0.36, 1); + background-color: rgba(25, 31, 39, 0.2); + transform: skewY(10deg); } + +.btn-outline-primary { + background-color: transparent; + color: #18b0a2; + border-color: rgba(24, 176, 162, 0.2) !important; } + .btn-outline-primary:hover, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary:focus, .btn-outline-primary.focus { + color: #18b0a2 !important; + border-color: rgba(24, 176, 162, 0.4) !important; } + .btn-outline-primary:hover::before, .btn-outline-primary:active::before, .btn-outline-primary.active::before, .btn-outline-primary:focus::before, .btn-outline-primary.focus::before { + height: 200%; + bottom: -25px; } + .btn-outline-primary::before { + content: ""; + width: 100%; + height: 100%; + position: absolute; + bottom: -70px; + left: 0; + z-index: -1; + transition: 0.35s cubic-bezier(0.65, 0.05, 0.36, 1); + background-color: rgba(24, 176, 162, 0.1); + transform: skewY(10deg); } + +.dark { + color-scheme: dark; } + +.light { + color-scheme: light; } + +::-webkit-scrollbar { + width: 10px; } + +::-webkit-scrollbar-track { + background: transparent; } + +::-webkit-scrollbar-thumb { + background: #313847; + border-radius: 8px; } + +::-webkit-scrollbar-thumb:hover { + background: #3f4759; } + +.dark body { + color: #bbb; + background-color: #0e1015; } + +.light body { + color: #555 !important; + background-color: #FFFFFF; } + +main { + width: calc(100% - 320px); + margin-left: auto; } + @media (max-width: 1199px) { + main { + width: 100%; } } + @media (max-width: 991px) { + main { + width: auto; } } +footer { + padding-top: 2rem; } + +.section { + padding-top: 4rem; + padding-bottom: 4rem; } + @media (max-width: 767px) { + .section { + padding-top: 3rem; + padding-bottom: 3rem; } } +.section-title { + margin-bottom: 4rem; } + @media (max-width: 767px) { + .section-title { + margin-bottom: 2.5rem; } } + .section-title h1 strong, .section-title .h1 strong, + .section-title h2 strong, + .section-title .h2 strong, + .section-title h3 strong, + .section-title .h3 strong { + color: #18b0a2; } + .section-title h2, .section-title .h2 { + margin: auto; + width: fit-content; + text-align: center; + position: relative; + font-weight: 500; } + @media (max-width: 767px) { + .section-title h2, .section-title .h2 { + padding-left: 40px; + font-size: 1.6rem !important; + text-align: start; + margin: 0; } } + .section-title h2::before, .section-title .h2::before, .section-title h2::after, .section-title .h2::after { + content: "⭓"; + font-weight: bold; + position: absolute; + color: #18b0a2; + letter-spacing: 2px; + left: -55px; + top: 50%; + line-height: 0; + font-size: 85%; } + @media (max-width: 767px) { + .section-title h2::before, .section-title .h2::before, .section-title h2::after, .section-title .h2::after { + left: 0; } } + .section-title h2::after, .section-title .h2::after { + left: auto; + right: -55px; } + @media (max-width: 767px) { + .section-title h2::after, .section-title .h2::after { + display: none; } } + .section-title .sub-title { + font-size: 1rem; + padding: 20px 0px; + margin-top: 10px; + text-align: center; } + @media (max-width: 575px) { + .section-title .sub-title { + text-align: start; } } +.social-links a { + width: 40px; + height: 40px; + line-height: 40px; + text-align: center; + background-color: transparent !important; + color: #eee !important; + border: 1px solid rgba(24, 176, 162, 0.15) !important; + transition: all 0.3s; } + .social-links a:hover { + background-color: #18b0a2 !important; + color: #fff !important; + border-color: transparent !important; } + +.light .social-links a { + color: #222 !important; } + .light .social-links a:hover { + color: #fff !important; } + +.fw-medium { + font-weight: 500; } + +.bg-dark { + background-color: #151923 !important; } + +.text-primary { + color: #18b0a2 !important; } + +.bg-primary { + background-color: #18b0a2 !important; } + +.bg-primary-soft { + background-color: rgba(24, 176, 162, 0.2) !important; } + +.light .text-white { + color: #222 !important; } + +.light .bg-primary-soft { + background-color: rgba(24, 176, 162, 0.1) !important; } + +.light .bg-dark { + background-color: #f6f6f6 !important; } + +.form-control { + padding: 0.6rem 1rem !important; + color: #fff !important; + border: 1px solid rgba(24, 176, 162, 0.15) !important; + box-shadow: none !important; + background-color: #191f27 !important; } + .form-control:focus { + border-color: rgba(24, 176, 162, 0.8) !important; } + +.light .form-control { + color: #222 !important; + background-color: #eee !important; } + +textarea { + resize: none; } + +.back-to-top { + position: fixed; + right: 25px; + bottom: 15px; + width: 46px; + height: 46px; + z-index: 50; + visibility: visible; + transform: translateY(30px); + transition: all 0.2s ease-out; + background-color: rgba(255, 255, 255, 0.1); + opacity: 0; + color: #fff; } + @media (max-width: 991px) { + .back-to-top { + background-color: #18b0a2; } } + @media (max-width: 767px) { + .back-to-top { + right: 10px; } } + .back-to-top.active { + transform: translateY(-10px); + opacity: 1; } + .back-to-top:hover { + background-color: rgba(24, 176, 162, 0.15) !important; } + +.light .back-to-top { + background-color: rgba(34, 34, 34, 0.1); + color: #222; } + @media (max-width: 991px) { + .light .back-to-top { + color: #fff; + background-color: #18b0a2; } } +.content h1, +.content .h1, +.content h2, +.content .h2, +.content h3, +.content .h3, +.content h4, +.content .h4, +.content h5, +.content .h5 { + font-weight: 400; } + +.content p { + margin-bottom: 1rem !important; } + +.content a { + color: #959595; } + .content a:hover { + color: #18b0a2; } + +.content img { + border-radius: 6px; } + +.content ol, +.content ul { + padding-left: 1.5rem; } + .content ol li, + .content ul li { + margin-bottom: 0.7rem; } + +.content ul { + padding-left: 0; + margin-bottom: 1.5rem; + list-style-type: none; } + .content ul li { + padding-left: 1.5rem; + position: relative; } + .content ul li::before { + position: absolute; + content: ""; + height: 0.5rem; + width: 0.5rem; + border-radius: 50%; + background-color: #18b0a2; + left: 3px; + top: 0.5rem; } + +.content table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + border-radius: 6px; + overflow: hidden; } + +.content table td, +.content table th { + padding: 0.75rem; + vertical-align: top; + margin-bottom: 0; } + +.content tr:not(:last-child) { + border-bottom: 1px solid rgba(24, 176, 162, 0.15); } + +.content th { + font-weight: 500; } + +.content thead { + background-color: #191f27; + margin-bottom: 0; } + .content thead tr { + border-bottom: 1px solid rgba(24, 176, 162, 0.15); } + +.content tbody { + background-color: #151923; + margin-bottom: 0; } + +.content .notices p { + border-radius: 5px; + color: #191f27; } + .content .notices p::before { + content: "⭓"; + border: 0px !important; } + +.content .accordion-item { + border: 0; } + +.content .accordion-button { + padding: 0.7rem 1.25rem; + color: #bbb; + background-color: #eee; } + .content .accordion-button::after { + background-image: url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 16 16%22 fill=%22%23000000%22%3E%3Cpath fill-rule=%22evenodd%22 d=%22M1.646 4.646a.5.5.0 01.708.0L8 10.293l5.646-5.647a.5.5.0 01.708.708l-6 6a.5.5.0 01-.708.0l-6-6a.5.5.0 010-.708z%22/%3E%3C/svg%3E"); } + .content .accordion-button:focus { + border-color: inherit; + box-shadow: none; } + .content .accordion-button:not(.collapsed) { + color: #bbb; + box-shadow: none; } + +.content blockquote { + color: #eee; + padding: 1.2rem 30px; + border: 1px solid rgba(24, 176, 162, 0.4); + border-left: 3px solid rgba(24, 176, 162, 0.8); + margin: 2rem 0; + background: transparent; + font-weight: 400; } + .content blockquote p { + margin-bottom: 0 !important; } + .content blockquote cite { + display: inline-block; + margin-top: 1rem; } + +.content pre { + display: block; + padding: 20px; + margin: 0.7rem 0; + white-space: pre-wrap; + border-radius: 6px; } + +.content code { + margin-bottom: 0 !important; + font-size: 100%; } + +.content iframe { + border-radius: 6px; } + +.light .content thead { + background-color: #eee; } + +.light .content tbody { + background-color: #f6f6f6; } + +.dark .card { + color: #bbb; } + +.light .card { + color: #555; } + +#sidebarContent { + background-color: #191f27; + padding: 45px 45px 0 45px; + max-width: 320px; + overflow-y: auto; } + #sidebarContent::-webkit-scrollbar-thumb { + background: transparent; } + #sidebarContent:hover::-webkit-scrollbar-thumb { + background: #2b313e; } + @media (max-width: 1199px) { + #sidebarContent.hidden { + top: 0px; + max-width: 100%; + left: -100%; + max-width: 300px; + padding-left: 20px; + transition: all 0.4s ease-out; + z-index: 777; } + #sidebarContent.hidden.active { + left: 0px; } } + #sidebarContent .navbar-nav .nav-item a { + font-weight: 400; + font-size: 1.1rem; + margin-bottom: 10px; + color: rgba(255, 255, 255, 0.75); + transition: color 0.3s; } + #sidebarContent .navbar-nav .nav-item a i { + font-size: 0.9em; + color: rgba(255, 255, 255, 0.5); + transition: 0.3s; } + #sidebarContent .navbar-nav .nav-item a.nav-link.active, + #sidebarContent .navbar-nav .nav-item a.nav-link:hover { + color: #fff; } + #sidebarContent .navbar-nav .nav-item a.nav-link.active i, + #sidebarContent .navbar-nav .nav-item a.nav-link:hover i { + color: #fff; } + +.theme-switcher { + position: relative; } + .theme-switcher span { + position: absolute; + height: 30px; + width: 50px; + border-radius: 30px; + background-color: #222; + cursor: pointer; + z-index: 99; + transform: rotateZ(180deg) rotateX(180deg); + transform-origin: center; } + .theme-switcher span::before { + position: absolute; + left: 5px; + bottom: 5px; + height: 20px; + width: 20px; + content: ""; + border-radius: 50%; + background-color: #fff; + transition: 0.3s; } + .theme-switcher #toggler { + opacity: 0; + display: none; + touch-action: none; } + .theme-switcher #toggler:checked ~ span { + background-color: #2d3846; } + .theme-switcher #toggler:checked ~ span::before { + background-color: #2d3846; + box-shadow: inset -8px -3px 0 0px #fff; + transform: translate(18px, 0px); } + +.navbar-toggler { + background-color: rgba(255, 255, 255, 0.2); + transition: background-color 0.3s; + padding: 2px; + position: fixed; + top: 30px; + right: 25px; + z-index: 9999; } + @media (max-width: 991px) { + .navbar-toggler { + background-color: #18b0a2; } } + @media (max-width: 767px) { + .navbar-toggler { + right: 10px; } } + .navbar-toggler:focus { + box-shadow: none; } + .navbar-toggler label { + display: block; + cursor: pointer; + position: absolute; + width: 40px; + height: 40px; + bottom: 0; + right: 0; } + .navbar-toggler label svg { + transform: scale(1.5); } + .navbar-toggler.active .line--1, + .navbar-toggler.active .line--3 { + stroke-dasharray: 22.627416998 126.64183044433594; } + .navbar-toggler.active .line--2 { + stroke-dasharray: 0 126.64183044433594; } + .navbar-toggler.active .line--1, + .navbar-toggler.active .line--3 { + stroke-dashoffset: -94.1149185097; } + .navbar-toggler.active .line--2 { + stroke-dashoffset: -50; } + .navbar-toggler path { + fill: none; + stroke: white; + stroke-width: 3; + stroke-linecap: round; + stroke-linejoin: round; + stroke-dasharray: 24 126.64183044433594; + stroke-dashoffset: -38; + transition: all 0.4s cubic-bezier(0.645, 0.045, 0.355, 1); } + +.navbar-show { + overflow-y: hidden; } + +.tf-backdrop { + display: none !important; } + @media (max-width: 1199px) { + .tf-backdrop { + display: block !important; } } +html.light #sidebarContent { + background-color: rgba(188, 188, 188, 0.2) !important; } + html.light #sidebarContent:hover::-webkit-scrollbar-thumb { + background: rgba(188, 188, 188, 0.7); } + +html.light .navbar-nav .nav-item a { + color: rgba(34, 34, 34, 0.6) !important; } + html.light .navbar-nav .nav-item a i { + color: rgba(34, 34, 34, 0.4) !important; } + +html.light .navbar-nav .nav-item a.nav-link.active, +html.light .navbar-nav .nav-item a.nav-link:hover { + color: #222 !important; } + html.light .navbar-nav .nav-item a.nav-link.active i, + html.light .navbar-nav .nav-item a.nav-link:hover i { + color: #222 !important; } + +#banner { + padding: 8rem 0; } + @media (max-width: 767px) { + #banner { + padding-top: 5rem; + padding-bottom: 5rem; } } + #banner::after { + content: ""; + position: absolute; + width: 690px; + height: 690px; + left: 5%; + top: -30%; + background: linear-gradient(180deg, rgba(250, 209, 65, 0.5) 0%, rgba(0, 71, 255, 0.2) 33.85%, rgba(24, 176, 162, 0.7) 67.71%, rgba(233, 65, 0, 0.5) 100%); + opacity: 0.4; + filter: blur(75px); + z-index: -1; } + +.image-block { + border: 1px solid rgba(24, 176, 162, 0.2); + padding: 20px; } + @media (max-width: 1199px) { + .image-block { + padding: 10px; } } + @media (max-width: 991px) { + .image-block { + border: 0; + padding: 0; } + .image-block img { + padding: 0; + height: 160px; + width: 150px !important; + object-fit: cover; + object-position: top; } } +.additional-info { + margin-bottom: 35px; } + .additional-info tr { + display: block; + margin-bottom: 7px; } + .additional-info tr td { + position: relative; + vertical-align: top; } + .additional-info tr td:first-child { + width: 130px; } + .additional-info tr td:last-child { + padding-left: 30px; } + @media (max-width: 400px) { + .additional-info tr td { + word-break: break-word; + font-size: 0.9rem; } } + .additional-info tr td:nth-child(2)::before { + content: ":"; + position: absolute; + left: 0px; + font-weight: bold; + opacity: 0.75; } + +#skill { + z-index: 1; } + #skill::before { + content: ""; + position: absolute; + width: 600px; + height: 400px; + right: -10%; + bottom: 30%; + background: linear-gradient(180deg, rgba(250, 209, 65, 0.5) 0%, rgba(0, 71, 255, 0.2) 33.85%, #18b0a2 67.71%, rgba(233, 65, 0, 0.5) 100%); + opacity: 0.4; + filter: blur(200px); + z-index: -1; + pointer-events: none; } + #skill .progress-item > div > span:last-child { + color: #18b0a2; } + #skill .progress-item .progress { + height: 10px; + background-color: rgba(24, 176, 162, 0.3); } + #skill .progress-item .progress .progress-bar { + background-color: #18b0a2; + height: 100%; + line-height: 10px; + font-size: 0; + padding: 0; } + @media (max-width: 400px) { + #skill .progress-item .progress { + height: 10px; } } +#resume { + z-index: 1; } + #resume::before { + content: ""; + position: absolute; + width: 400px; + height: 400px; + left: 5%; + bottom: 30%; + background-color: #18b0a2; + background-image: radial-gradient(at 81% 18%, #eedc77 0px, transparent 50%), radial-gradient(at 71% 74%, #ede882 0px, transparent 50%), radial-gradient(at 63% 28%, #da5885 0px, transparent 50%), radial-gradient(at 26% 98%, #96bbe9 0px, transparent 50%), radial-gradient(at 99% 53%, #9191e3 0px, transparent 50%), radial-gradient(at 78% 85%, #bd8ced 0px, transparent 50%), radial-gradient(at 15% 55%, #4ef4a6 0px, transparent 50%); + opacity: 0.4; + filter: blur(200px); + z-index: -1; + pointer-events: none; } + #resume .divider { + padding: 0; + position: absolute; + width: 1px; + height: calc(100% - 180px); + background-color: rgba(24, 176, 162, 0.2); + bottom: 40px; + left: 50%; } + #resume .divider::after, #resume .divider::before { + content: ""; + position: absolute; + width: 20px; + height: 20px; + border: 1px solid rgba(24, 176, 162, 0.3); + border-radius: 50%; + bottom: -30px; + left: -10px; } + #resume .divider::before { + bottom: auto; + top: -30px; } + #resume .card { + padding: 30px; + color: #bbb; } + #resume .card .icon { + height: 50px; + width: 50px; + text-align: center; + line-height: 50px; + color: #18b0a2; + background-color: rgba(24, 176, 162, 0.15); + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; } + #resume .card .card-body p { + font-size: 1rem; } + #resume .card .card-body strong { + font-weight: normal; + color: #18b0a2; } + +.projects, +.blog-wrapper { + column-count: 3; + column-gap: 1.5rem; } + @media (max-width: 991px) { + .projects, + .blog-wrapper { + column-count: 2; } } + @media (max-width: 767px) { + .projects, + .blog-wrapper { + column-count: 1; } } +.meta-link:hover { + color: #18b0a2 !important; + text-decoration: underline !important; } + +.project-item .card, +.blog-post .card { + border: 1px solid rgba(24, 176, 162, 0.15); + overflow: hidden; } + .project-item .card > a:first-child img, + .blog-post .card > a:first-child img { + transition: all 0.2s; + display: block; + border: none; } + .project-item .card > a:first-child:hover img, + .blog-post .card > a:first-child:hover img { + transform: scale(1.02); } + .project-item .card .card-title, + .blog-post .card .card-title { + margin-bottom: 0.8rem; } + .project-item .card .card-title a, + .blog-post .card .card-title a { + text-decoration-color: #18b0a2; } + .project-item .card .card-title a:hover, + .blog-post .card .card-title a:hover { + text-decoration: underline; + text-decoration-color: #18b0a2; } + .project-item .card .card-text, + .blog-post .card .card-text { + font-size: 1rem; + font-weight: 300; + line-height: 160%; } + .project-item .card .card-btn i, + .blog-post .card .card-btn i { + transition: all 0.4s; + font-size: 14px; + text-align: center; + line-height: 12px; + margin-left: 5px; } + .project-item .card .card-btn:hover i, + .blog-post .card .card-btn:hover i { + transform: translateX(5px); + color: #18b0a2 !important; } + +.blog-post .post-meta li:not(:first-child)::before { + content: "-"; + font-size: 10px; + margin-right: 5px; } + +.blog-post .post-meta a, +.blog-post .post-meta li { + font-size: 0.875rem; + color: rgba(255, 255, 255, 0.7); } + +.blog-post .post-meta span { + font-size: 0.875rem; + color: rgba(255, 255, 255, 0.7); } + +.blog-post .card > a:first-child { + border-radius: 10px 10px 0px 0px; } + +.blog-post .card .card-btn { + color: #fff; } + .blog-post .card .card-btn img { + transition: all 0.4s; } + .blog-post .card .card-btn:hover { + color: #18b0a2 !important; } + .blog-post .card .card-btn:hover img { + margin-left: 15px; } + .blog-post .card .card-btn img { + margin-left: 10px; } + +.light .blog-post .post-meta a, +.light .blog-post .post-meta li { + color: rgba(34, 34, 34, 0.7) !important; } + +.post-meta a, +.post-meta li, +.post-meta span { + font-size: 0.975rem; + color: rgba(255, 255, 255, 0.7); } + +.post-meta li:not(:first-child)::before { + content: "-"; + font-size: 10px; + margin-right: 5px; } + +.featured-image { + max-height: 600px; + object-fit: cover; } + +#blog { + position: relative; } + #blog::before { + content: ""; + position: absolute; + z-index: -1; + width: 1159px; + height: 644px; + left: -60%; + top: 10%; + background: #34d71b; + opacity: 0.1; + filter: blur(200px); + transform: rotate(30deg); } + @media (max-width: 991px) { + #blog::before { + display: none; } } +#contact::before { + content: ""; + position: absolute; + width: 1058.89px; + height: 540.7px; + left: -60%; + bottom: 30%; + background-color: #24ff00; + opacity: 0.1; + filter: blur(200px); + transform: rotate(30deg); + z-index: -1; } + @media (max-width: 1399px) { + #contact::before { + display: none; } } +#contact::after { + content: ""; + position: absolute; + width: 561px; + height: 683px; + left: 1359px; + top: 0px; + background: linear-gradient(180deg, rgba(250, 209, 65, 0.5) 0%, rgba(0, 71, 255, 0.5) 33.85%, rgba(0, 255, 56, 0.5) 67.71%, rgba(233, 65, 0, 0.5) 100%); + opacity: 0.4; + filter: blur(175px); + z-index: -1; } + @media (max-width: 1399px) { + #contact::after { + display: none; } } +#contact form { + z-index: 1; + border: 1px solid rgba(24, 176, 162, 0.15); } + +footer a, +footer p { + color: rgba(255, 255, 255, 0.7); } + +footer p { + font-size: 0.9375rem; + line-height: 140%; } + +footer .list-inline { + text-align: center; } + footer .list-inline li a { + width: 40px; + height: 40px; + transition: all 0.3s; + border: 1px solid rgba(24, 176, 162, 0.15); + color: rgba(255, 255, 255, 0.7); } + footer .list-inline li a:hover { + background-color: rgba(24, 176, 162, 0.2); } + footer .list-inline li a i { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); } + +footer .contact-list img { + width: 25px; + height: 25px; + object-fit: contain; + object-position: center; } + +footer .copyright-info { + border-top: 1px solid rgba(24, 176, 162, 0.15); } + +.light footer a, +.light footer p { + color: rgba(34, 34, 34, 0.7) !important; } + +.notice { + margin-bottom: 1.5rem; + border: 1px solid #e5e7eb; + padding: 1.5rem; } + +.notice-head { + display: flex; + align-items: center; } + +.notice-head svg { + margin-right: 0.75rem; } + +.notice-head p { + font-size: 1.25rem; + font-weight: 600; + color: #1f2937; + margin: 0; + line-height: 1; } + +.notice-body { + margin-top: 0.75rem; } + +.notice-body p { + margin: 0; } + +.notice.note { + color: #1b83e2; + border-color: currentColor; } + +.notice.tip { + color: #40d294; + border-color: currentColor; } + +.notice.info { + color: #e3a72c; + border-color: currentColor; } + +.notice.warning { + color: #db2c23; + border-color: currentColor; } + +.dark .notice-head p { + color: #d1d5db; } + +.tab-nav { + list-style: none; + padding: 0; + margin: 0 !important; + list-style-type: none !important; + display: flex; + border-bottom: 1px solid #aaa; + overflow-x: auto; } + .tab-nav::-webkit-scrollbar { + width: 2px; } + +.tab-nav-item { + padding: 0.5rem 1rem !important; + cursor: pointer; + opacity: 0.8; + margin: 0 !important; + white-space: nowrap; } + +.tab-nav-item::before { + display: none !important; } + +.tab-nav-item.active { + border-bottom: 3px solid #aaa; + opacity: 1; } + +.tab-content .tab-content-panel { + display: none; + padding: 1rem 0.5rem; } + +.tab-content .tab-content-panel p { + margin-bottom: 0 !important; } + +.tab-content .tab-content-panel.active { + display: block; } + +.img { + max-width: 100%; + height: auto; } + +.img-light { + display: initial; } + +.img-dark { + display: none; } + +.dark .img-light { + display: none; } + +.dark .img-dark { + display: initial; } + +.content img { + max-width: 100%; + margin-bottom: 1.5rem; + height: auto; + display: inline-block; } + .content img.glightbox { + cursor: pointer; } + .content img.img-center { + display: block; + margin-left: auto; + margin-right: auto; } + .content img.img-left { + display: block; + margin-left: 0; + margin-right: auto; } + .content img.img-right { + display: block; + margin-left: auto; + margin-right: 0; } + .content img.img-float-left { + float: left; + margin-right: 1.5rem; } + .content img.img-float-right { + float: right; + margin-left: 1.5rem; } + +.content figure { + display: inline-block; + margin-bottom: 1.5rem; } + .content figure img { + margin-bottom: 0.7rem; } + .content figure.img-center { + display: block; + text-align: center; } + .content figure.img-left { + display: block; + text-align: left; } + .content figure.img-right { + display: block; + text-align: right; } + .content figure.img-float-left { + float: left; + margin-right: 1.5rem; } + .content figure.img-float-right { + float: right; + margin-left: 1.5rem; } + +.img { + max-width: 100%; + height: auto; } + +/*! + * Justified gallery style + */ +.gallery { + display: flex; + flex-wrap: wrap; + margin-left: -10px; + margin-right: -10px; } + +.gallery .gallery-item { + margin: 0 10px; + margin-bottom: 20px; + overflow: hidden; + max-width: calc(100% - 20px); } + +.gallery .gallery-item img { + user-select: none; + width: 100%; + vertical-align: middle; + transition: 0.3s; } + +.gallery.zoomable .gallery-item:hover img { + transform: scale(1.05); + cursor: zoom-in; } + +.gallery::after { + content: ""; + flex-grow: 99999; + min-width: calc(100vw / 3); } + +@media (max-width: 460px) { + .gallery { + flex-direction: column; } + .gallery .gallery-item { + width: calc(100% - 20px) !important; } } + +.gallery-slider .swiper-slide img { + width: 100%; } + +.gallery-slider .swiper-button-prev, +.gallery-slider .swiper-button-next { + color: white; + opacity: 0; + transition: 0.3s; } + +.gallery-slider:hover .swiper-button-prev, +.gallery-slider:hover .swiper-button-next { + opacity: 1; } + +.gallery-slider:hover .swiper-button-prev { + left: 30px; } + +.gallery-slider:hover .swiper-button-next { + right: 30px; } + +.table-of-content { + margin: 1rem 0 1.5rem; } + .table-of-content summary { + font-size: 18px; + color: #fff; + background-color: #555; + padding: 5px 20px; + margin-bottom: 0 !important; } + .table-of-content ul li::before { + display: none; } + .table-of-content #TableOfContents { + padding: 10px; + background-color: #f7f7f7; } + .table-of-content #TableOfContents li, + .table-of-content #TableOfContents a { + color: #333 !important; } + .table-of-content #TableOfContents a { + text-decoration: none; } + .table-of-content #TableOfContents a:hover { + text-decoration: underline; } + +.content .table-of-content ul li, +.content .table-of-content ol li { + margin-bottom: 6px !important; } + +.dark #TableOfContents { + background-color: #333; } + .dark #TableOfContents li, + .dark #TableOfContents a { + color: #fff !important; } diff --git a/public/images/blog/blog-5.jpg b/public/images/blog/blog-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..deb50a9ceb22631636ce08fd454dc059f02dfd5d GIT binary patch literal 473169 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

tg>OfU#wQ(JxZ5!j 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�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≷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 PAYItR1m=)hP0N^YL5tV!UPh z@_9C@ZY5#w`q7v$#GZ745jxpwL03)GGE+@U=r-XfN7*?dzrnVn4!svw^!4uyPgiTw zJqpfWVO?O#xj=Hkr_dr_dcs&&oIEla_pZm{1=*07)fsqOpN-Q$MIe2?H^vUPMh`Co zuH!@54Ix&c)A>IRe2949qXS1D$!v|BL_vB;DhxFj^MDWirm?0B-YzDXIMf|66MeB| z#VFjpn1Hey3-I7dH2HLsNLP=+zU_lBahy8_hB%{#w*?1`YRX$d1XUnGIoGZA{za`m zDVr%MQM8#aC?-EmTUQN%w5Ns*_r$2t-4Hpg7ounMMMOkzj2YvPVZ(Z$XHQoS08!F9 zDS-}E|A0|rF+h{)9DN-HTpi6xM>xaR-3HFq+ORT~aJIpSY>aXiqn?}>Mlb5qSs$Ua zw^;Gj;cup)iuA}E@;RGp7m<%pf;-nUkev|t?#eZcj5eI5uadpurb1r zkggat*c%ha^u&y*{Sh-g6jLVl!^q)*7&6!&Zk=tQPX4G^CTe}IkAM%E&@I!4b z`GW=I^DxTQg*g0O4Bd+>bV&DeI#SX)BahLRDk)6aTC+JxdIoCn@wUOxfgTt&)RTP4 zAhOkcFf*bLri2Az^pNfd?c+iE-i+(GR0#76l`)7|)LQr?7Yd_{brqO6+K2XAEH0eL zz{9IWyiR?w5~se8!kUFWQJm_5fxV4kX)GnZCE;v99Qk`$$)4E%rJe1#C zfGcNa;Mn(*$aW2at)&(}FNvFXDQb~_1U{6-V&YH6OYM1^c4?RYpNUjm8=R@z&RT#U3? zAuv`*xQa)XfYK89b6JI~wO$9fS<100zaO4nnvI$}iFo}i7r$38L<0q`Kkb{2)Hwl| zF~tjhKIYI+7qlLgk{iIqyJAKr65zxC5BsC%RBJFrVV>%on+|W%MjZ)j6_pqK1nX_U5mq&a}oG@ z=Ln1$>cCayvMNwU`NOJrJsfrL-S&xiek&EPDCmD*lZL-HFTnq5PNL^tgx8fk@Ub|1 zAVPZT!^26;wLr4~K$q?~J+=ZrpICvFE21!EQdbNaXak?FMljSA^8vA#e`gH% z@V3`M^cZ_&#Jb_Db%RjJx^rp^Ind*E^&(U~D!?y?=D@?vl%wKc>-#C&#qs;HfKbW+ zA7d0{4yAW92?ut?;Kr}nsC~8q4{t8Tq3;W^c~chB(jwsP?F=m~83%ZXB`WVnY537^2#6tl#Z z7Q#n5B0j<$rTKkvG=&JMAZ@CUjUZ@EoZxyb( zn4Z;$_Sl#Koe?vsJM!iSX zlK~&Bt0NG(nV~qaKMpl7R-mD31@`S4LV>ak=FBoi*l4X*;3F*<4{t9>T zTt1Hcn1XdHBVcEx$0ZdQ?T)!I={XB2CXaW=*^{I*8di`L;d_XsxWQWEefn7;|E*kdx|)n-}JzzPyBj<5E1nxdeAEmf**IiKJh8!bo4r4I*ZH zgG<_eM7_q6w{ijSP;}5F(c*-GAACYa;E-1OgW^^ZsZcm5MUCFsz=2(mmpuaO*G$H@ zduE}rycBP1R-*ptLfkn!2bYh|#Ak&e=t}{yy&>rwJ)Y~DQI!qvZ;9R8Lh$pU5x8+N z9JSBm@xCbuZyS>7T&JL^JQ?5Z9EB;PY~bsrKxbPC^tJdi+zNaMR96zwr;}Ey=Zv0% zAG#{xK%l<_J_M?(sBl->cinMtFYU*2me|a~p}ixqve*j+X|Cw$tw(lD!r20;Dn*H31NvH#O&gEur>wF%mm~x4>QYG;q~o{xV*I^n6`o$t=4L(wbYR_cF?66UW<=2WNe{xgqqFd)x`cbz&u*vS;pGIJIT(fDARCw&DY(QLn|s1& z9G&d7u%uuxYM&J1b=4v+;r_Cs096k%aPmMTGUB{3XG#}@_;%!g4^5#fPA*g_>(K9; z=&(5zY}SY?661ytt$y#%4b>IfU7jf_+`+_^p%HRai;D9gh2EAw&m$P6r7It+gP z)-7`bBtqB6fM7d(y<;rOZqG*T)4BLi6U%jcys4aln-^!}=c5boIq4cUOrD#~Wk7nQ zp9ZFl(m_hBHEx}rhsMW?@xF2u-d28wHx+B}^ja|rlKY~!w=P_*Nv9f#V5%dAi;XVk z$Mxmt4XesXXI0R58rPue*+LxH6Na4RPM8~Qi6CEX7_oUebasOMjS)4$9x3r%upP2bRJ$+uSCt$Qt~Yq;_}H{e7|chLIa$* zf+9n85myjo-?0OR1>54sJ+skVv7YmdUz2bAngRP)3lSUcOyAKWohpWdDZOiY$Ie#T z+#H{^ONV36=J9xNaSk_>_}?0H$S3|sDoe@(QXz;!$OUiTe9OTSqGth(Hi>VAg z?&g?3YZOxFhaqfa035A#p{v1n=qeMX3TZ3wF@AI>96LA(x30{@^M?s|S(8aNBoAkg zM3R;Z&nw4Uy)dK{=+|?@$u(C`o98(v?g#{yA0)IbH%*h(t%I-v!WCm zV>&ZK+_7b4IKJC41J_S4;HXPqRc7G&nbA17+Z)^0x*$8r3f30P{}*$933pBfa7as_ ziPchqAOc|2_MSxCeTkS2l&M3c(4bERR~#Wzlfc|sAE_xruyI2qc5IKqsS|m)cy19+ z9L>kBoypknc>)sWkAbtZc}ww|NChmGs`0`)A6Qoz8+>hRu7?o=eK99`C}xEBru}CQ zABsIZ?C81a3>(UMpTJ0+*DH(?bIc$+B+c?herf>DpCCVuVzgJaolEZR8$Sywne(TW9X8UZfTGP=?>}6k?!tpq)|$c?(XhpDCzEg_x*h9`@vfC zpINi7ea3M@Q>oeMAY;Na)-8QZvH9)vtO3IT%>YawVDd4*Tylg_QMRGCwbempA|@z> zvI2bJC+JMqqu}b$2B^unGi8i=$M>I%W)t6x3;upTdVRA#Mw+wbAtQ@Kmt7X<=$TY~7Gu`jNi z^OlG7wyiwst%B6d>w|h^Vnedt)|Ni4|5J=%go{qQr2qHX5Z0TmR5R|z%v*c%oSL?h5V;_Lj;>nVL}E{J{k|rg>g4DNPtJGV5^@W2|;8ZPP>EAFrpM^4VN0tUrriz>1fp0 zv<&i4wrq>3`N<8uQcl&SpO!rl0QO~uy1iGsc+wVz{S&2p&xRi6uGIUoL>8Vt1>2Ep zKBfH3dC?un2CdHkTL-9j5q36D+c40=xn^79$QSI0#2RruH-1on`VN@ZjkGP=izZX> zJq@goP7P~ddo>2DVB~~{)&g9QuicxOc#!jP*_$;G6bS0+!chZIxpvbze}N`)^}~?y zMFvyH|FT=8ij>H^idz~I^R8ODyezv9oUH%qUH*ps>LZ`P+s^S-)#u_ApGxJH92aCA zMNiHo)_YAU*q#)WN3VP^GaP)(6#t6cC2e70$}~Y7YIof01ok5#(;MwQKAKd1bAL`JpdY?VcZJpN^p2_lCL0k2%LvKlIdRC* zJ|S3LQwGX}jLg8)`*m0=lLzMYwGv`mj0o?7x|FoUepn_O5D8a7|DlGOoo8XUZ%i3A zl>hUAjVvz_js`8EVZ+N&AXZ|a6k9C)Z!4|?~lBXsR8A0s?dZ{)n`R71xb#T*wx$AuV5*SV*g7?nm zp+fgQUn8iSlE^)<)cw=NfGUYVyqFg`!ap4F=SU_u)Q+P>4Tle9KG`wiUedSI}IG zF|Xv}c(zYKB7zgaH5%46teCd*vapEN{T241$=e!jd9}DmNxM{wlZ69f+G|v`8V4`-G`z3|Q)Y~s zNM-M`sZGs~TiZVACo1o6_&3*oLz9Z}Y{xl`#rb(77Omw^iqrkxnbfwTq!USbxqK{%Lzl4d5=v(b zKu;C?&S7>EGfh{94HxQ4W0;SZ7&cE<{orugc(S*H(~$~CEhZTf^p%K{GXqMm<((Zu*RU5MD zq^g4*e|=cK_AIo})aT8(p0kPWm`bqK@&3ko#R?3PPMCa4OL6X!R``MVh`ptyaS(Ar zO^1Tc6%d7b$c(HIO>7&}w=_YoNM~raYB{$t3E>Yh6lVT1->xUvk{#QYYy@sPav{fn zE(a6IV|w1P^~Iq)@M1*@?9&xAXRElebe~=$%cQ{=r+)BGPwKS(dGcV?HHZNu3_PvL zavD?0e6A27K^xe|JvH1|y#qziaJMxBJObO6sEbo?T46jX$3r3pVWm8g@g&Ewmq9U@ zD{9E={J(k^Bv3c(rCjlRfF(OEk_YF{WWb!nIhXcB;{el(fl%CnD`O=yv~Wwj{q=gYdZqSAU?)3InE`_+~|ifYth(U-$A$gT1Eq#Y8dXJ zA2I(~rN4W;}Rj>D}(Y&GO!Y;bG6T(-r5?Infu( zni!vp6{?uS)YP;GSi93kUqiqlxGjG?_ATxFFQ!F@zLLc4Y6r0!|G|cPI4-CL9^-sg zJsD?NvUFGIIm}#Bg?}ju=v<|Yb;vbv;CDtc_*_}8FKgW?4iinT+^pX7lq9WH5uy(W z`5@v?!2Coyys%i1fa&bf;lojsHc(TgeI)&K3Hhg!EnEZR)iKh&Fm9F3%Rn$-&c7yz zT?2ICt&qLh9B0F3LK@a{i<3P6{V9Z*S` zel}%?Uv`0eSXw?znp{QKT~r!8vtw_%kRvF|Qgy%G|^wJ#ix8CG7*~RR6zL5pWa=TulEj z*-1DRG|Oxvs#Bi)K%J0GJV%EY(M-+i;tfP3RfDT?aMCf)LjS^>Uc_e4K0RlE9eug0 zNTS4KJsrTUMB=&wE1)-V@Zd5@9Z*$#-jb>syR5hz6Q%6--OdcqUcJD zu8#ufCy>O1VJnsyL~&5=wrOIhbA0ZkbUw?f8d8s=_M}tX>EWLGf8me^twyx^o_YI` ztO-FW;1ZVkMJz1F&FVorKn_2%L4&y3dO#$5fI8^BqPSz%Vo$iSqf&qS{ z*qv-BkaR~bAlk3B3FG^5?oDS5cL$ZbV6YD(=I9syX~Y)K8-FlL*?PhPyH9@siP%Mx zT1Ob7O-eob%vA0bmwDHc?4iqD9uK?jmfQ#BRpYI#AIrS@J!!1^k{ z{2SKXnyh$#40ZOqF+VpGQFuQ?yK*)`_>C5T#e6dAoq22WWF$eamMqv7MKMtSTa|(H zvJn5Z+l`T@?h&va*j(CB1KV&8{!woEYjP=8UqY7>3Z*p#RiwnqU15GtXyTIXcdKOk zAl zASpkWA&gJr=jT@-C^-}vUuTMH>0tQtajYBL{hm-$w2Cycp$&~9RdRECOk1w=z%OhT zO!MVI!jBCx-QN#lbN?gcit7zeCIHPuNH#T&V}pm@lVWIcd7$&r8br6{!+iRk+u@fx z#hayG0Nvte^kuLw1wPz1DJYxmd2YL*0_#4>^nTxFMv-*_p)j)oGlG8tBPBKHKd=E`|{$hf- zsv^ixt}O2#A(Uf$bO}#y^rF58N`?V+Wb->}#4iKc!b3_(l1?k+w)(gsyGI9l`uprkeIhZY*=w5 z{U*wG7-{SZR|^oOu-aG*Lw|eG0EaY2DLO5MZzhO;)uvm%8d@YgZG4Jt{>u^q`pF7W z1n91R>tDZZTa~_oy9J@Wp?uf$`2gg(I@IVi(btUiH9>e1l*dYCXm*T1vVuMENXdGb z?Ng=`U8)J_*sB>2zR%zKa1ZDK@r_4YL{i6e*oW8?LwL~=lnOAQz#?4bzge6^%SLb~Xfj8+=FgcqZMM5n0_B)89f96tB3?&oB|!2am3JQZETr^CFu4)jey?LQv2{*j z`X~Q1HPm@SRV}CyL)|8ScEc|nRKr!>Ltz_s| z%5lTQgoIoV0_ZCpTE;w!?e!>>f^W5PV~e?8T0A)wy?IFZ2&o4n3}ob}g=F1RRQQL* zrPh>Z@_Q`}eK2a5h~Hd<*v3sokiOwm4XSN78~Q5tPgidz-w!@r;I&lN4h4Vu9mg~Z_g_r70KeFf{ zbma&b(|f1N)cimrDtB>uDuva`IgUt=uS(~cjkuHFz><5#rN;@sEQ%H>MY_Q--*dGT z|L;wpUJZB|05ZmE0`;@+%#dkkegn!xy_5H<`OhyJl({GxIRzGbFB9%qH}10%WP z6M0R2!q2QMtlqG6llQYjOUnJ{@25xrdouR8lZArL7l}6d7(w4Td9QY1%cG>^t68zv z)_p*|5V$ledK_+v zFB*KQ$TsA=@59ne_7^gSh};UUKf7Y=X*LTW*?}hn`0O|J0N=+)jsqclueKA9~-x%b_-K+ z;@~Ojr+j&>vdZ{)9AW1EyGqkRAL)e|W7i?>yfY)>_l$g-Nog;!vn6`sWeYbH>xhYp zI!4UZ3w^RsOyL*S+`u6T9FY<(-{jDOutR#!?2yFLA2*GH*+O^$d%uJcbdN%tld`wW zenW9=YxCF$F%c{x8oRWb>K`d1Ed^eL24;HH13RS@n0{^Hy;+%Bb7>N@w*~Z;r8dHG z(%PaQOSc2TIQRpFW#pKXd9+)PNjPh*gi*}pVUz)Z`AuImC0Nd)ha{_pBJa8;4KYPD zXw}%#f#Madv4WHmb!dx8d>Fd}b0IUD#H&p|Jhbo$CgyI$*sk%zW!Cqy@`vESYE+y* zN=5$bh||V+=^XPPpgo7SW*0v!%TgUaE>5?c{-g7A(39zoaG<(4eB$eCd}?FmqY^?z zM5!+pOlWs|HG2_*ddwN^wyX&62C?p3#-*t|7*?lF>oE1lxXfZS6tT8=xCTeX(2U)3 z85a%v$0_pqxKdm?5&1fd6`Y&R3Ky$%5r@M5)t~BDM}w#R^n_&$sfL5rE&9Wr(o>j) z7)zS(f3@{>F2(Mr#Y%A6Jn`kO0g>=JFWleK43iTXXxFo{;Er52s^EJ`2f{vv(%Tv8 z84Oujo6_B3y=LBL|2)XIvM<t_xKzAM5G+562xll`S!=%wA&Sx5qn^VjQD78PLSGbNc@bewBuYw67HLDXx<}+_Vao><`dvg+ zT!oCxFh*L;QgbZFHgG!V)~JeZ=W}o3?}=3ESu<&$<>J3As76HOhpm`S_ z#w{pw|93&G!n$uk9{#ye8mNksma(qKJr$gm{pcW?pVatyWkoweR{S&B)n_Y+SFja7 z#^SzER=Pj`H$7o}u@zV)C#JD_A-~xPl`P%|c&dBbZm>bQnBVzlM5OZmG+?~?o!$A{ zRRp9sv7(MCTRhV#vR=u(Dj(jABe+cYfga0%ufSTR_aS~9{qIz=@wfNb2Tu!x!#<%p zC9lhdEsnOT&4}w#6HLe=_E|gU^swYdH7Z0Ai7rNZgj< zbPe0-Wu<+bkSZ-W$@J0tddo*IE>sc7vg5jXT@t|VT!_UUX@xJoWJgzxh0Qk@`d*+r z2ehELR^|%X`*b!)5b1B_uk6m@#D_D7OEtqF!xO~*oTv=2GZpbYE6q+%9J15d>N2kr zn6YD-=cD22W%qC)w&QuI2ojm(&t%&#YOh~8d3N&;w26EljM*3bwxiLY$7r-O- ziCmVkh8Nb$^|T%dZV%pq)jLwX!$|b_Wxbur30z7&G2X2Z?fkXMrDyu_cB4?PoxfO* zDOU`WMO~XcZ!Fm7yRC`Ub|h-9FjKXPIh=Pz%T>1)ro+Qyeg6Cc5zK8(wXjX_8F7Zw`5l`rFqjYJo;7r9BE)g66+^Z&E40U}e8|EAdWk1t z)A56(lJHPukp=S~+t4?48cL^jsy=i^ z!`xNnnf{y{>Wedr@UbFHoV*GNpJnq%3XQG%63&4q{2n)6{KC^iEb%R`BvX)gyWpA}ew(=`ES;{?@vJ)%j z9(v;8TawCKus7UH2r9K{3~og+^KwIIjAfNh)b*fvxCOq+YRhmsS3UeAKN6YJujk3% zNQ%u`TP$_=DW)S@n%>WQg4uix$tK+ZxCF>T+IC$_j{+PQ$_^2tm|{6^BdcGd7T0Cw z=@w!8ml$X6kCl`1Vvt3`Ado7)AsK>L-?N3O`9#FOJk(6F#@vcY znq;4|X#FpG+J3QAe5FgR57&>p7Jg};$6WB{r7Dl-wYYI9Z&{qPv-Zo6gGs(l9jcd@^UAbDFxc7>VC?G1)?g+(Df zXf2UyDu!;`%@fTDm40}%hOy5@>xwKguI!SA-%7@C`6j?mY_k4)>*1-(EL)fxo#wFy zte+R5d8-Yc|3fr>Ya@i^1mPMRT1yN<$#d&+Q@UoT`QK6n;x2ag|XO?8F9^UUuWbl>yMK6q#qC~!U%U^GCbp}B$WeGV zVJRUKn;$_}olwGN+p;FNosF=P(W%DgkIl1;x0e}~y@9^OgdNkV=4Vz( zKmAtJJta*lR#P0mz8jO;5v-R!0SObBQ9 z%$OiD=ZzAHtc3{JE+GLT<5OpVZgm=!Br*YH!9-o(W$77YdWLrpmtM7*u#*0Dt@py} ztXu&+uNQI1&iTnB6vD75JOIFm#x?oaD)PxMqIcbZCAU zbZ}Mh^ijGwV?I4DR|n755!I(?^ES=mH%AC1;Legx%jsh_mvPh*DCL0uT&0RAj7zN*uEUofG-s$6N8n*jUGg2LI+<+Vf&zH%@5bmnr$lH!rHn(NR6$ zueX<{j!fz6nEC=h>Y$_Jr(yE8l^1tY#%_(x7ck{>qq2GY%6;i*s@3T6Ueb2uIIq{gK z9}7tY+Y^AFUAS(C5>hEo2KJv}C<7~EDId!Pof{}K+|7ZF6#HD{!ROF=uu5u7D?ap) zFKgFZODAp$xIXISU*k=bOVn!X$k92C$^9nk^90rl5?MZJ@0u;axy#j>@G~B z5%}p_d;oAl&Pk}?v{W$^fq9VNfUg_ zzS9-T zk$8*gEr0Oq zG-O3)%Go4lr+{`c>jeGItrin!c+5%pWQFP?1FFH}v~ta%=G3Iwa#P@c703c}<5z2? zC|v5yi5LdWh6TlA3lXr(JsD|<=%y#VDF<98;z4?GL`caZ%PqVCZnZaOyuG)A@S>2$ zWdbjZag>+ol}wrjq*w3jTN2zq#RW-wXC=WVqOf~b;bNinv3-H{=IkibFjKabRt}UD zto-e?@!f)Bx4%51s#7u~YujPxcQ6GvqTG)v$A=xm_Q^#vI<$#?Bte5bADtd=J_0IP z*o(kc8Ov8OeMB2m{HR7ZmA+BTT@ZYJjTuF*L0&-mpEG4^WOWSHX;!Y!Q~uR)R9GLM zD0s}-CP>h}99Fu{iRj0sNq)KrHM>)|bxw@2uxys<=nwQ2tTa#;p%+g=k|}!23SgMzw`qP z@5Me=(0{&1OdVsdNtjCcI^e1kd6lApVJsT`Ar3!x&kbas3&f zSI1LZw#!wxeh0ftkeugRqe3Ox*oGHDFIc%wwW;E@cdg* z`gPKeh7g54(OUK6VbBmI@TBY(8Qy%SJ6#2#mh&P^>ip}l(Gus5e_0N718e7oJbHU zx##X3Ni=VuE}Zl%=zK|@R>J$Kq`V!oc1IdAr{bq4NESU(TH)!)yd1`h*SZ={iFzWEPw9tI%oRgmEOd;-Aq{`AQ0S_Rq&^!1Y2x;57;CuAob7ClPwr6DhBBvd)ec=P;N!n-})4g$u0S2|IqP>-28UZ?51L zXaN`l-mb2RJsUcaqR^Fp96ZRa%kQ?ouUmlirDM%~XwM^7B}A?DwMkT%tVc|g_3;#N zf>t77=G1A`zU0b7xeBr_`nc1fNwEX=;w(OeL$uD^&k}+dH{&&#HB>T5Zri z>2O;j*Z+j5C%^#N`5x*cu%BOJ&LJZC261PsdL;@Gf5tcI0rMOj4a0tra{YFTvYRf_ ziLIKr4)`BN*@D98Zu1$IzBP$=HrScvB0CYgDTk(Pwm&gj+=@PQr!FMc%jIuoLRO*k z&P|H9FnPTM(c&!qkk2d%PONB;qW;qJPV|h{+H$I!sgY;Lz&&}mLGevL65cGsAi0V= zy|jMU>a?bO!SghF(b9ZCaSqPSSC#R+BA1+qNC`o1U&a+w`MoaMW1-R1O0+YJT6pog z^{dG>70SLFd`pQ2t5oQ;TW+*lc_pnp1><^bj;_G`WA%vm$Er1n`r~sLwF)xad_Y{o zX~o=b6)J>&3z46}p`P+lraug(eLaTVBb6f%dJVXkX@D^>Y3IMF4hDY=fSHpi07^1| zg7j0CR?Fcf)YdakuKH8B#&#qAarnaQCO4KH)sNLsFU_PHr+Hv?x%JvCE9n=Wd@`16 z&BEZzI5!}17 z8A=GI#JfKU*J4Q(UQirnW(M7~WCSkRzIbzz=`ONRc5vZ@c7F;n%Lw4E^x{zqh6R(e z+7NW`u@R?Cs$O{QFt#}i_2k7Mf;EX_Y)bJd!P8${-Q0r#SzsvXj{Y6sA>;I@wXI5oK4F1XEwxYE6}ET zRTpvMaazT#g7Ie}By1H;8U7Y>y!l5JdLM$w?PrRz5sS8zaV0U~4w4wwhKa7D(Pw)Yfos2Q`ny>WOrB-6=H4n71j z7(i_VR2Y8V82`E)S&na-kT?gsMR7+UFp`Y^$i*`!0ohh*^4e2tt9s3~q#I@*R#(H? z;G)Iqq)zaW>&ZHzZevseRA?;gYiwoLPjE`r5?f4J zh74*Y1d@mc!eUdMUELB*>*Bbo@}dei*CU^5>zkyHefH8YPBw+1)nu!W7<933nJ_n| zHSnV>Tn9#Qluoob0&l(`_?8>Q-MbZuTk~uQ9mWT)W(>&^pnz%@$*QoH(q$f|oKnHD zsKl}QS^GN&0UusG1+ic~mJ#<{=L9Fo+w%g__AeiDR*Rl;(* zH^%{9{$WH&^uyhLbZD_P!b`=uit+HM9axU)=(t`Hd@aDxbzz+Qw>SioDD$oZMUCZf zPa8-(gO<6?po?msr;eNad+QM83lB|>ksSBh`Go_p3FdP zfBSS}8f{CH%tM!rLJcmBoNx_weO3^~=fW_^?qZbV<*aUqO3s)|{quwR`4Nqed;|%0DsZ&(C`phIdJ;ploP{ZN1x|h`Rg|smjib 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 O8R{GBp>95T{r><(4N)}! literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-5_hu_1fa9c9461e8a5b22.webp b/public/images/blog/blog-5_hu_1fa9c9461e8a5b22.webp new file mode 100644 index 0000000000000000000000000000000000000000..f6c8ec0c47a7aca01518f6b68c6521cda6b7ebec GIT binary patch literal 12276 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-5_hu_3f20fe629de38114.webp b/public/images/blog/blog-5_hu_3f20fe629de38114.webp new file mode 100644 index 0000000000000000000000000000000000000000..25cd0b3a2339e352046825b154eb255b81422223 GIT binary patch literal 15576 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-5_hu_cc034401e2f1274e.jpg b/public/images/blog/blog-5_hu_cc034401e2f1274e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f5a3143aea3acc52e7466d9648247f279262644 GIT binary patch literal 42928 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 T2mlD!c3Z@7nC_GafB*mhb`y8L literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-5_hu_e4f7343564430a7c.webp b/public/images/blog/blog-5_hu_e4f7343564430a7c.webp new file mode 100644 index 0000000000000000000000000000000000000000..df7e93303848f6ba032e9b98a4f78ff777fce3f3 GIT binary patch literal 20242 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%0AKRq6+L__(xBmuJ^9EqghR8DkE>PHTp=oxx zpS^zP#sDTdL#Yk@mt=|1o*fv7(Z}c@%8CS@^u=?t%z zldHDo8vS`YA&L(#*702V@Sy_&e6u%pz{g1$u*L$kP!}L#5SKiQyFa}nMw17VM<}ex z>P3Ex$ery_;?nHTyG2q(ehk^gwkG3bjc%=f6ZCU3iWU<~GyASJfe)ewQ*(v)ayT zOqTKJn$wgRT)a=p+Kw}dkR=dL`kTh-6XcEef{HH=YK{e=<^ff{x@aKX&1P?rB;)jd zVhtO57R4x|1PoO>c=bHNy#d&N`D)V76`zDtiaRF@*(b|Bjn6_Rm2*R2+1Ajq_lifa z8G6T_CT4i%aH<4JsgO!uZGaAj+=?q*9xmrMRyH!hZ_sHivsvf zGX)+}1D?wJ#vean%-C$xJ}83Opiz6Ll~m<4S)SMf`~5^uy2x1KV_sfL2~QIUvhvVB z@v~CcnfkiBkS}sc-9v?_CzjEDOD4e`n9wPe`SlcIg--7p?J(|DN1Azr2^88j9GTb< zWv0-K_Sbwn$EoHG=oCf;eD+RiZh60dFDoVoKH)+`!(eAS)yax3rj>Rr z2r7}?w1-i10&`I<1b5?Oi)dAOlX|PBDP5DfRhF`asHqD~$IQ|G--y6)|GIWda>61$ z&fSQ-T>YqPcq7ZLlxRum`W*eZFaIGJH@EoJm{0ric@|heOgz*}RS4j|ngCje1RWzJ zTTJxwc$(hkNHHXgo5O~AH`)gP+v2Dnk0bL?kAr>SWkX)l^Y_gE|2_Ni8#&xLW`gD1 z+MG2&amJo*>;bh5d7ig2F461)8AV2jLp~eX5oL*Yh#BrVDBycsH@Ps}0t0Z+7aZ~{ zv|l-&6H89ye+nzO>t92hf}WKH3iai<$}R(iEzy45FJS18i1Rt4Us0Rrs%sL6hG$7D zka#OcODOMf$y=ueJKh~a8;9AlQu_fQH6<&gKPmxG4h%NSyQ%%zJa1KTkrB9z9|`il z=R1hOa8ZKbh{kOUnw?weODZ|-P)A6%b`Y`U!|w!?owiTzbz7~Vc$t>HiJN#6Vo`PC z&x!i)sQ}727kKRcd;6eTRrv1B1P3HRBb&>=SbxL=Tu9SG6G!LZbuueBkgE$L zAQ?wHhkf4u&2rv9minIQ#_z|<>H@D3hl_8Q0}B^Ni}+g}peDX9)_v;=piDn)UFu#x~}|z7&ZdQRa?1*K3xb*6`U33mXfs#nJJU6@8#SEDzl4~ z>r+h-BzVoM04^D!-;rXsCateL?Jwl%bcfm>aDSTbVpbPUe|iWq(unr1W31 zQhY{V^58p)><1nPKppT`!WEN3Iu>emWrgHH%&7D%8mxusicGEfQtp{9Nn5rs4vmYv zJtSD{P4F)&E^*l#xC(PfiC($Gd`0$dbv%41(!85je)a_d3(8qtX~5$D?xhGB_1=L} zaFZ-Xyxgv;DJml&q_H3wo{Kw+i7d{ajzKxG1p28O4;ao2FIxl<9F2bkEHWegYBwwC dLhFY#)}P$ToYDmB03^76A-Vln00kl?008Kw|%b z1S`x)L{X9|Jfgb(=44=dX# zbw-gag3nz-ZV*sW)6mkfvfX3n;1m)T5fu}ckbk70sHCi-s;l=zA8KG|Wbwk%%G$=( z&ehG`!_&*#=k=S=u<*ALk%>vkDXD4i-lyl~7Zes1my~||QdM13TUX!E_^qR}tGlPS zuYYWOVsdKw$4@w7X?bOJZGB^N3$=f6cyxS%K0U(#u>KSW{QIXsf0Ks{lm`%h_p5VYD!^XM8k4yeQ8}FI(t-Auj_!JKlK2)~fU>4LtQa*PXC7@yvLa?HKi}Z&? z|2=_1{znr1OQ3(ra}5WGurNTtu*d*e;PhGRkr0;7t1*NUZVONIogzjN_#*$?r$W(t z-TZ^rI(fk}Z`w7rQGXb_i+=*Lj`tDF35)>7IC7@@p$Zu7(sB}Z@U z#Oju6ohG4JV;$X#-1&>j`}og!p$95`+WYM~(=$40do&O9Sd z{3-d|(!P4r?C42hh4*^6AFuoSU1n-bJ{C+Bll4sK0}%FE)HQGm=Nf3UzOaAW(2!2} z-tWDcjON^PLDRa9B&i*q$?s#;$_1ChJH60BINgMw&rx4OyeG+0Q+9( zD=e{3Sw^ETg}E}GBtQP#Ah&4YAvs+Pzm1IRuq}M|vSmW_8;N{n&@(e%L>AS0r_VQd zd#cCjkIZZV0efrgPpNBmzO7**((EvI$ju9gokGgaevERo12y)GOIgl?I3_Peb0Rxi zdeW)=oVm|KBru^uMePYngSrv&|-Y3L4SM zv`OyeqORL<%e%6ZP|`cJ{p*VEG5P0~FH+gxe!_SWb#Z(B2&IWk{e@^LE^kD{&T=zL z^@fS1^T<+TTNs^ZXa%;**1@|Y>@2^+gW45TtW3>j8@byxKsaw|BpOk?pJnlk^uXhV z^@SbcftYC$XSqht_m0w&T%t^jB%^tbaLu}DUW?HM|Hy>Z+MS=v+4j1K)<}5I+no;H zZ7)+ZGYMXM99+0!g?>zrS9p7Qo{dQQo0E@YvkrHO-`&1Ht2DNQXXz6^V!XBwKHZf%b!6q8< zP1F0uH$;oNZ)N5s?Y_!pL+h5<9BVo|xE_z>v#|IEmV4LYi%Bu19C~*2)({JRgIae! zSDvLwn zyl#h(RQr3jtCS4Ah(&cg`~K#3hee@D9oioeWAtr}k#0l1w6i$$-DkWa=cA$$k&2tu z`r#3y(b-)2V^VzXCFmk`CjRpu1zdO9yD{2@w=56~uXk#HnwhgtRL11F2m~bOD?Vm4 z=tL$A`$+h6eL^j~u|jrNB#09`aa_(2EyfD=olWPdA=f)z*`(H;2uR(C8GFxmn=E#M zQ=nd=QguE2K#q3PtZo?+4%d@mq{|7nT%cQNq9u&RNHSO;k|KsgklPO&&sdOg{&-$2 z?V3|~Gdf9G`jdkzRyz}|6NNqD^SZkWoP%o=b0gM;Pf%8G{iG{qH_Pv5c0|{kHuMgw zo@nBsp^wJ>ROD(_rSv1I@P*FV1>8&j+}ky)Wd%gZ!FG%1aiSeLLy+ z@?c4PTS?n&N{V>#@~+q-3TI!*?<y6W`Sj9i9f(&42U$`Nk=qMp07?wJ!}8{S}HHhC_Ow&OC@P=C%xx(QuqIlo^O z+?RS^z?-HUPZg!BjGY(B4ir)(=LPZDPPr`1ci020g|C{4j>HDt+sLJETm$&}t1trK$gpkycrLZonUn;o`Pe>FP( z;x2BKTv^k1P6S)&s9fgpLlWEU`%C;O3R1Q55-a6Cl zAi?cI4h?tFjSrGq#(n?3>X}OW?L2z|<6u}-^IJ>*^4DxqRA8u+FiALS&UoJFOL)ju zApZ}BL^-A)C@~WDH3>c5`Eb~!$M)7veaaV1BBlbjO*sbf&9S&be`?!BSg1rr;bmyi z>`-G<4yU-;0e^MYeLS=7<}yR1g^fAs&LPjETSRpj4|Eha2A-1IU`1@%;`mc8%Z4wI zNKwIGoQ*UkO4iF?rb}k3s))@EKQoEzG6y#4ti!8^$-LAv&N+7l@2Ifw_TKo4eV9wa z3?y}Vm=jBp-HX}VbI5NomUkjePK^uLb&kzzyaqzeZ&qiib<_p0qM}>%V@Po@do8Rx zNMHH*K+7)JkteU4FO9X4>V1ImPU4N?0~P{$*ho5Xs`R8zm#A(zDr1NtCz^ADDXhqXWAYag-DHBhG1<&rz=Jl zW;*F;jdUtYXB7=@=3@p)JwA^VJA+ow+vX6Im#x$)>CkOn(Qi!oTm#Y7my+5y9jv(-m>r}zq;0U?_s|Gsi3uNS z#z;{jd%m6_$7`xv>r*C`m3cou?;SFhj(H_ZErsKRu&$b@4nL@ttdYNk%PlXE%4s}7 zq=lD$?w-$p>hc+my&%l{c_A{^tb#atw`cIYk>}1+R?EIKJqUI)VG+7Q{o%Ped7!0X zJ|6q(&C541S#3Ec!;!N{VuRNE^rgffB|37F`TIVu1(7GaofH&O0L`xHdoQmTRa}wt z+g&+uf>KP!bJ?`M)7r~l(>UGso7X^?k$No*Np-xS)et%Lz57v>>dX_xtF<7Rr#(`K z1&%d`bQdy6l86iOj}Y8}`%~P{4)9agy(}_`F!s`sT-(-F&Dn4h?*wthv)7S8NF;kM z=Ko^cNDesiFPrc)wm z)-RAY&Tn`oLsITGz;2>LOa-+Bt=ZSt@mef@t#UOnz3v*#MW|(Dd~dQEkE8B6XC!JhWUTiB}kvoyxJJWgCX5Sq+ncZfDXjUrgD>J7p5Z8{+AF=wF?vm(W z)GgLHv4L3C5L|Qdlne}etP$~%VLj(Eema}VsrDeJ#q?fqv;582G}76)+5VsRu#dY8 zr(w+A-aM(o z<8%!m*u$RK(%oI$rR|4JU+g!}VWh^oe zrKW~sYGxSqxty(;D-~|<>PSvC$8IdeauQ_e&1Hzwhz{H~$yWEVw>7c~FP0a+1~NFD zv+w&_w|M&r(9GVK<{B~XY}79;>Z1DiJyB7NAhhLUSyz)G&8l!|yUHNk%v#>w+13?d zd{P-R2I1*u09+$`(Qf!7!o=@~lp!aB3e=H8Z>#B>#17~MzLe;Ry^O}RGY=a(^GA}t{om#SWMO@RX!d(xuaK4|_ZovS-x zr0x)K^~}5m%C2gUj*GhOf~Di_U>P@nkpE7L{vbk2{#m+pGLc?zw+DzWZCR2NV=Z_AI^@6>*=va#sC zp(FXcwv?JJe`No2$|hn`wQh3rB=b$hFf+e6%T#PciM{V?=DlA1UKO~^64UGqlxCpHV%Rku#VRf(KsM}p&l3fGe6vR*c7Fba^8eHG^ z*z7Y(iygm+yB^&WE=EXu1d`Zo`Z{!2*!xx}+94$Mn%ML%2bcr9V|>9!Al^M(hXp%& z{_GrH=N;399<6+hvF5o}M|w!182Y5$Q-}5P=wsF+OxG3u_Oq)e>oPK^m#v(WWM{^m zfo}Oy)-a>F`tGy&H9MXe^*C*G1)B^;<$cE=%%`Z$YWI%|gb6(z#E(rJ$(AgJN1!T8 zS!M$&$f@_2rI?zQ5^qvWRTkN$ah#dB&{6qHh)tnkqDPdhIu)(Pw}Dt^BT1$Cqzy}J z*8Viz!Rna&E{_cUx*e6c^9^Wzz^L3cU~9|Z7JLmHa_-v`CfS!5&${y~!{R;+`l>I) zUNFMoa`Shi+{f7XR|Fl7aT_*UZE9R?iwfQ&zP?z5mU~$VAz>Zc<*Me1$ERlO2krD4 z503Usd<|{W7h-j$m7Y<)8Ggg^vYYxIOe3WR^HQneoJ78R45|rArXnjgvN_ z>K&?iTjC2sQaAp1+}ZW?kGEEvUQC4xC;ULCu9?$Z$ejB}kM+2a-lA{_l@)!(CAkR1 zIMis!dSUMMm=!gchqelT8R6O85%y*C(JBhh%dy-tBCkX$}-uH^NhFeSWjyu*+{Y$Ld~B=@ z|B_Pe*2bF@W1dx#JEGlZxNXJ8oA8~2kQMfatJJ_bxqS{gVKGXb?{S>o*gencXK6%V zPXG%{*w5{2fMhL%t))tNmjbiP;m699b*C)-kF9hQBaLuUV;pS%vHBIJa8#a-PG|xMHbkC$N!6|Rdqvm{h@Ns@rjh|1h zXY=_kpbe@02Ag&Q*#yU##g0D>(sx0P0wW8jZiS~STGL9?tVA9`(3;KE?sv`S;iVID z_hjT5ZtWR%+o|>)@g;Q4Pmfsl$hBFFb~gFVmB)R5k`tjLa3Ng{S0*ZeoUb+a^tAFO zb)J2Dd|~`B&?8^!reOOSRD0Q+&gQJ{jl(DIqLd0!hOp@1aYozoM>7-RbZYV?BR2xy zP!~3Q16e+IJb+eYA*?a&ry{-mZcj!3+F=}>%~Tr+uUmvwvYABv6SBk`T)~5ue)mz; zOiYnWJ-XLG+>I~B1O_Y77Fh5&yNa3(&8n2_EOox%#5vIj2J&-!htr`OGu`$c-<3dK z=w9p#IW=uN>EcaVUcj?C%V(4zqx_Uxoybi@!|>GEgd{>rKfGsrJ6*6c?sm5_XTUBA z#pyCdP5r4Q+pkYPX>oq?2!BcAL`El#hV*s29RBC}x;+f(Yf|pZgY-toMneO*8E2Va z49in?N#|H%b0$r_OY3oElwJR%!C26W@FHGkCn3ODHM|E5$ z^-;FR^I!|^o4SljE#BQ91T=lQ6ZWHBxag9a$rVSUbYC7j1uqZ@GkP2-PbcY*O%18g z`sdA%uw2Yi)nv5GzLRD$#uCay&K_ctwED$4bvf8v%8vmRmVuDWm}${i zdy##=XoTA`Y}eC8!o8ePa0xfZVv*5oly_ZXD0e*nHEnnIOW2@EcaJE_Uan=NS>3I! zF)QT+{z4RhtFN&Wsq{?M>*@?kRn^-T@c!7cW0t$25u^6`33lZMjz~>2kE<=nxSAz# zhk7sj_Sd6*v~X^euho6crjAbNKI&pEZ8r|Q|nOxAY1pq} zG$h~k(7@+ZjrTo-5mbXFRMNI!zHSQZb|M#zka7)Vc}bi}E?^uysi({b z5iFYp_$Q!>d!}T_(^SI_9*(<{ZnQ~H)+dDbl3=GV1@IYnEa!x!wz457zO*}G?bKK5 z*0R9gTj2}F)(<+%LM~kMyoUV6t7%u?Kh=VKe_JG@C3!v}i|glKv?1XE1LFciYK4|M zudk2z!k-Jgk`4uY@V+|zNpgf^0#H*luXn;)z_mjWf2 z<7xAHmLu1taF)*@1ol4V2@#Hd!rm-FN_TS_XK~?@OO3XCGQ_y{B}EOknzGg+Jf9&N z$rzm%Pf(Vrm8gg3of72z3CbJ&EC3UwlEsc$u={cjaPh$2>%!F5-@dewTiw-`!A^{Z z){5njawR>sFkfw1sipQys8Gma)T=kQX?iqT?8nCr7H8ME-mf==JppPO4JscxZ$|sw{YAD|64^Xv7w+H7Byxj2Lj8DmHRxkD`>uK5>8=9*gCuF)sM%c-G|hD zio569kPUt;O7rKewby{@Pw}$UY;Lq#prLg&Tefl3R@(>J}wKetpmCzF0l%fw5@e;`PWz+b zo7I%zjF(7K({D_Zee%43{!KD{APujjhMq%q3 zO-{0GdN1U{A>Y>ghLkSi{AZ!5;?>MRFqME_?Y_4(9&V6SwvvFPn!_*fV>u7bglOX|1<3wX@7-#V?iY5V4ii+Ul1`kmDJW*Co${Uz+f!& z%*S&81zt ze5T$n$54@kOkXi1dMlQ4`)Xq=*-9RqG`i&yUISHBfrvX(P+2bH+t0Q{p{eLzjHSV+ zH-VT2C6Re33$_0dmSzxba!CbAKZOKm9Jd{0L;dFhVcH_?oR z5fm8j6)3bY{ucvl^?WTODblUYZ`@ZG7^D?S*1>R9v}Mo5`Ms@$xiXrhq5x<*xC>W> z2lwCK<$_+3ms=0)U%}6vqa7d!12?^Tg{{$Qe&N!xhYox?hDC|Cw5!j*Yp9eQs3>SB zIcoee8BJGZCv6a(@UrjB`AO$6SQpQ7P<7zgEx>P5zpVi=das~jn4tyZBwvqU8D3Kz z1RspKQHtILMbWbv4wVnq;zv~;C%7tVma|d-4MIBFa)f_OuyFoI_j26hahqJ6zI?XC zNWf$)pY-dQt}XQS%63AbV~nf* zTUvPrn%D8KYzc2ofPzy0A$tL4qB?CsUJ$j=i!p6E0*(jWH*InF4svfEsG@_Wme61DN_NFu5iCLJk4J1d6?uPO|F;G~@iA-$!O7<) z{7tiK(cr~#DE=ITs-K{{i85gs3IOk4>ZbtD9ZmYzxh<7uuVEJo5_KIjvY-)JwSAt(re$?wak{IPRtJ>+N{0V9Lk z<;|MV5JI?XXIIFkQJ*-?eSpo@JLpVwN9QzMLoHS7^Sh_d>MU$}jMkd8yb35VwgV{9 zl@^FNlA4MXM9Iz(FDiYbst_0js_mZZf8I z`#<~DZ~ah3f{OZ24q_<$HiO?sG1NhY{!jc2^B*w(8{Gfln+LRxhJw6Efc^jH;rDLd zS-n^-W}O25l$AnT8S}r&ho=3u)juZtKf>rYxS&)DUyVTX`!8?uU)}t_vp+R4Q-a9` zgPo$q$F216^iJ6EyjneRSECpo)lSoN{jeSIn!zfGa_)CdWpVTx5O^K9Xs;6p{ogXP&!gLquba`X%8VD|zW8f9fr>RKmG=hciy-bvb zJaCX%lzCjV*s4@S?CRAgQw_Y!ji%EQFObFoKwbXJdH(~N|IK40$$lU#ZaD$()q_Bv z2r_Y2U@YlY2PiD&BTc{p(Vct-_wp9LZ;iX4=8nehFQ4H08QvZr1s;=DE$>rcBt`NY`E-YVv?)|9E1ol~ay!U-F}%hl zS_rTLR>}J|kQm?&Maswzv}C8}@sh9fEv@uhqsz4(cqq&-e7_v4&%;8_=GDB@J}MU~ zUl0TO1?4=<3KK`~ANxEB9h`|(4q}~mp51~FyGZMk*1UZId_Pc2`i)(ei{OFe?&)w^*Mul%6q?shG zp9Ye$W98(1S}-*EVIo9byZ=DoNQI&l5?n^77*V<{AoQ0q!`S=+9tH{8l*gEN7)`~| zBjOJ*F zE62@dHr&iS)mc8vtq`4!Y$v1`Yxb-Pi$ zE!y4qXOW|0e&V0(@dpcS)6(p4Rl=xV$=;Ep70YMPPp$m0l`hD+RZFcOJ%>FiV0}QT z-#@f;=8Tgmpvke3Q2IO&Lyi)q$d%iKw2t83f%~@H(g~y7+Bg2KRRgBk5lk`#HxV;p z6zfsrtl>s_^hljj?9U&NPJ*7+FAblwa$7!zA+h(BCbY2Kp4S}a5O33ce|e_=-rFN;qJvNj5?@l| zPog*a9tzrNmBonqEw(@GG%u}?QPT&I6MR6CkE#e6Xm4d{tuu~NC(%x)+Sq*gi)0B0 zaILO+e%8O%jmT{dQD!qMy_>>}6t-6$6_&PonEu>4I+y^UeXOr2 zDp|U7_P=^S1DYU*bC1!?*aZj7?z8uqM}ogA$;nck733YI5@_AkO|Nej+6sTlU4BuS zESr!^V6Yb1RA}pYR(++IVJkh+gMJnb@}&8s6bH=KV{KV`jBn=yq=%a*|KM)W{f(X$ zaNUnHW6!+?GN)RT5G~e*F$H7Q12ffTMKp#z8|+xj6c&+VlZVopiccHMLnrf@#vk?N ze1Bq0FBx?Ty0nT^ah_sf#03rj?V=np^Ahb$)nD@+yrmsRHn~#kj)l70umv2)y{@f2 zxR6BsN_s$)sANH_=!RW-AbD%7*)iZ=d|-88mak^J(ZWG`vWcwDam2>CV8 z9GC?N%BK7gEP{bLpOeqA?9Za9`E9VzYqp)DztMCY<1Q}nX7RvG6l~16AJ{uk9{7U| zT=3*_Np4Tnx4i>!>1&>B>(^+W;%i*w^A`(ubCD#~u|3BTcbjL{ zklYe?e-ho%EZyI%=dr;SktF*rm*|(XBIjUe%HZYKx-TIrYmO0gsTOF0=@z8Z+g}dw zKlJl&4l2ih#vV~%XKbhl8E(&JX{j^Z5t3H4G0rcn`YijF0%K@wGHOOGiaso4A1};u zE0IG-7E8a{pHOcqD@}ELx8kR_%%jKXi%`I7DROG^Lj04>21IY%iHG9wPn+YKi7N+K zX-@Len5uzfi`bf`BDALYBv0pAK-{0UUw$xLfuYmv?TD&y{;JLO&44u-SN~L9) zmWPB$sk7E+2{EdCn5h@5^&{KP)WQ>wH{*(D~#)8Nb(^^;oFc|ySP~jud9{>HM z2hYF&BTPAViu^)04e3%J5Mm)%XXSL$x#=)F!?w7;8* zyNdB+?4<>}<%HP!VbwLwaS9ALT6f7hLW<|wsqD(1L!G0keAWqfUTph&`9kDCO`hW+e^k zB9zqY^1X*;S_we{v7aZ8R6bPO+?njgkLf=dbkWno(_Dto+nezwicZ1U8rT6Qi_}e% z%TJ0+YcxuRG`BA_ILS046(jW$1;Z7IibrC@f~4`f+lcn0cn}$k&%Nc9+%kfQNKnt4 zf2D5eH$zcQUFmGuwH|bZ-(PX`K1mMZ zil06zoAcC8Jkfr?R_~WMYwS%g&c5mj^)pA^>XhNC zRThpqU61j?SmEZ1%M0Q*m{YTKXY6W9P8Cdf`bxnE`x>D2vk=Lg(y^Pi!i^i?T4%7J z>GE!&z~Jc|mKsxIrt*CLUDL(B3JL36AV*thiumZ~I}_33*(vKmNfZD_FIeYUP9)#e zblL2Hvxv&<4p?=~=E$Z-QGGy^KX7s@i@2SoEUwt2+MO393A=TnjgpNJTDJUX2Ng8V zOoVYTCqyDbS=n<*lt-?p&9>(8>QM|X!9>O`O+nk)3!&caG%Qeci{)W*0~-OG+Vp~i zO<2qbjtPU?I&FnztjbC5P1rXkndxR$iiC}{@tOQ+2oH$VgJlxBZ5f^v77(R+&OcEa zq`>%)w^e5(eBqf&UJbo*VyHo4GHv?_)Raegai68{$2k@39B(6?2QbOJAO?d(O;^*a zP?Rf(LT0M|ZxrrvmT>^k9Bnx|iQP)?3OjPMEkUXAHr975Q)#a+EIxUuBGyJ7SL-~7 zmSUme6)us$FDX+LNhcFmoq>DC<}R~#5YxlC1Cy4R*;-NO*_j3v3vqos>?c0#Sfjf# zpkew8f3lo(OrOi&?|&c5Z{{mC>@1a}+SycTb+18~k^*DSPY508zWm-XaY`=xpW^@%qoRs=-g3nW;|vI^4W zQ?10=8fEdlt^qS-vW`;Tf~I5aeGg@5t9@c#kc2sn*SI0-Whq;YCr<}E%>hH5YX7La zeL3AJA2+L4u|{+;UWL6(BycEgzjPAi9wVd1HK((s%yQm8mPqW4a&%SC3z8<3M>i}D z-qMKe@6c)?6|*?mSro zaq}GrQJL?@bv>lO$gpr1PMPo&+0`)^dJ^1Dxj}7CEA`B^xFxxaD^M4W+~`#~vM^1wqo0B-0+1V~Vpz#dRI~_<6jto3_Vf`o@J_HwcZjS;U56!d^9br zDlvjR6<;$rd!H90A%vuJI&c{l2F)f%9)*=TvwQ94ld}_%=tdrFSbABhJeM@35y*K6 z#^p;S3|>*4bPg?HFz`(QTg*4HB2O?BU1Px@&%1r81@95MX=#pLGq%46#1j8%>r(-S znYRL9vz^{DUsEEz_JM0a^2kbDxOfrdtZfEW;Ns?ZdNlmD#z#a!Hh$(0$8jTi(d zqhr|5*H?rMKfoC{?H*V=QaOcJ~FkkA%BYtFRG~X>4_P+MDwq4FXY0k7eYs_kQ zjyL0AW*En^xFW;i2%ZH>5^*#g%*(UX6t8Ucjj$+21V^Sx|mmm>cl- zWE~u+PE!88&`;X2W5JMdoqVKT8gOMH1Fq*1YYoD*Vn+q*OcM>vc(U@K zx0he=wTv~B;k}*LdX_9sSnpg1S^gb*OvyPhfMv>IbbhB#Ttp3)Z<&dT)JjsrjPqJ$DLa^7X$;47wYz_A< z>1Na*p+lkwQTc|F53ncYkA&}iqhk%rcV%~Lig}?$!*qkWZmjvZQIixs-N|&fvaV`M zn1i>xe1b)}KbM^m53`~1ADL6X1;26IvC9MXqOYp#dGQ47XCv&n#I{nRWj(n)<$btsE`(NgCFMf;8i3IT9$I?&{}qda zsbmftrf+FA04u8`JmX(EM0%=h`pMlx$@1s$ZbP8~YrXVWiW62FB;spdNFFmy?grq4 zGxR_OUIrLl1A=BW3tpFCF7$87Vh*`MzL%qNHxw8T9)Jm0vk8bQFg_wB`_U_8P0gRF zU#($GBqasE_X+L2oCk(u-6&;?1dlIAOew!)tL|OIz{4+J^R^wDdMj3eZVxu9%;yp) zCjKXx^+K?b7ehL$;G|C57~XA}txr%Qk*EQb8STcD*hnN#(RG!<=O50zh(M*tWa@{5 zrIJ$yA=uez)HNV)v<iGz}(^L(tmafFcXi_FG>pZ-7B=;W}=@wwCCa) zRP8plxBqc5k{SmFj zh~8Q8#hZKAfKLqHl`I1M4&wC+?|>JFJ5Eg-eMuZbB)qtBhnBPBHfjqr-s0oJYan5M z=BnAD?NAFw`M31DbB|LYHcE~d)adW}28NO;JKih114X~jQd}rrPS1E|(Kgu@$$Z(4*E&;SG%M|d`=_{G%petzMrdA^6 zpo+Cs^%K8d)Q0Wf5pEKvNg$yQ*3iX@+qPd=?5kqlJ3zCK{-@8a`3vWAG=DUi9k-%P|du5j}6jn6KG)(CIbPw~Pc_PKk(6#I3P-EeI6Zi2G0te;U-7}-zVw+3p<Qo z+pBHy74o2OT*T5rFa5f}f=;>nHBcRRk>c-r)oOf70PJu5sX|6}4EExiErLq&J$HlX z6~sIXq`^IZQD@@9rC;D4!3iXGVPCVA3A8ybu((Qzn7Ri3pm}Khg$Ec*`6ExR+Re|! za!CmO@}>V!FNAp_VHX+ZZv%g^l3cwuBm0l6awL>oTw3s#18|^ewhwc0wbfLm>vM5O z)fE0TXyTyl}Maa1G>zdX@V^chtbEw$xpE%>-_IFys0c zRncA1jI5(>mQ&@}@-*x8$`MQc(oTw1_nc=zb5+>TJ+3>ENDb$9&eo^@I(YiLxs@ZE z7OS(1#*@;{LI2FAU+vYe@XA~QmZxL7NdD`tr&Nm3uS)iZU*$Z3A3@PL5=|8=|6AsxMV` z9LERh!!&sx4ZV7>UI>AwhhKoa7PtUXAYBFRS`P0@?|Q05qB`IU?dA^r_6hABa)V0X zS;fV4MmufY^9~YYp9z5yL`fV&U5K$*5mr?eg5PLR&I&b$?yuPAL``f(m@1@TT%nYzRRuqWVTSkJ<2Q|VZr&o=j zfP+^;7!!ftDp8)7n2@WhVl-HQB^c=H$oT~}wfq(zbbmWL$iXG(qk$P0Hdhl9vg>Et zSJ!|jdIS$_aRq-|zpm_bewMRrat*w7V^ouCj9q}%itIN!J>jP3%JdL6KG)T{26DDx z=NAjhTAI$n17Y>4Dh5QDzYK!Gi`03s#G$PNsiUJWzf7M^M{gQg&cjN2EQ=pmH6+J_ zpzO^z4pO(nW572X<}5n3wnDh*Ir1XaOzQRs4`ni;)C`Fa{x3iPIMIIqDD-#fruqJc zU;f|cCC8|A!3CiX9JzB1>}>_c+`Hi7`@jFW{u4&of9UVS5`=J@iBZ|uph{%v`9t!p zpFL(_l`1>%!uqEA2Eas<`-6{@%a4mK0>JFh{dZ>qg*KS-=lQ)Qopfw@+p9^d59^9G z&HRkFx!CX;h%W%=098Vce@naKo~+;z8hm7+!dP7;^!{0jLZ6wmeQI-P`EEhXj4wy` zo)G|35D(+1{%!9Vp339ANB$4Fcx0G`zZc^N1?LPk2BP(4z_%%K<*$K-3D5?Y^HP;x zkPucoN(f|hXefS-Eb11NiS>RRX-hBNJj*r}KvpL9#JUf;Kp`S zYx7oeTZOOv+JZk`1OM>Q5Z{Oj2I0;xs$VU5yW+Ox$UwD%s^tM>{#tNIVhbQ3HITeg zx&WK#j-AaQq;q#m#8{SvXS~+i8`Hx5q!H)mJ6fh-#o;oK=F38($+DB|Sdf^}zXi7( zzS;}1;7V38po8QY3=cZoqiC5`ck-5s=f==jWfxG979Vt8F9$>-byfc4d*8Oux8OT= zFH!it!^g?8XT)C0729e^$3jo!f)XN< zGIWHsg!G4c(&g_RA9sc|ifVsr00>;tTKI#_xqQo_92Tsz4eH$YXF(06{lDnq-}%k| zlQlK}V9mBe{J=k0bEv#%ZjL&Ct^`tKts5#C!98$Ds<4qXB=6d!aSWm{m!9kr8d)d8RI|C}YvTDMbewWll=Y zK!uPldHJhh?OOjBJD?S5v>v{W;70{a7MjPqVBhlCj3=zifAXt z_X^Rr&qcZm6Rn%FcK-yufiz#f8j&e4joUWi(u6qMi)SDtzuY#nCUtli_8=vO;_q+) zKne}{TVY83-uVrM{8AyOYUH;+4InX%c+%?< zVr?BmNW~pMPXK!&zt{n*aGY560RXUDLk9`i&ZACW;JN;0cb)ltpX$X)Jn6CapT@uH zsqru2M;P&_TI=~6VAuQ;uxCwL{h@*W`rl+Yx}0bLPfURt4gz3TgN!Zf$ zdKpg-R29CMpn_?jk`$z;I1X$qdKr6Imb@G@O`0gkS z`_Tnp?n@gWeUq~D7a;$SH~R-%2j<^jaNUIW_pm$g0{@J=pCWcK01+i;!@A{JV4e-4 zfVhRf0j6tp!0hdQ2!MKG6wnSiVB>3A?fgwUnVAfoPD|aJ0H`;)H+{&h`#}vbF8?JD ze{7d$=4G9l`BGh-(pz?5+Eu_883#kwOM2>7<9i7zv#qAP`>rRvZI&RZKfWcMZjGfE zp|2JNIUq9xjN>vBCX;#K1@u&|n(i?GFMIH%ucR1KBc(k0Px<@fe!zbs&bCG2uU@mX z%;xt_`{b)GcgC;pKQrYESHRbiS$L{k%O39w!?VNl@r5l1{&XPGA(2HB=Al=+Dl!u* z%vsE@B*@%{&gg=pi6Z1YNRO}iumUFD>=OV@+9>>OPlgTluLGw4bpZRe#B%EXdLA(X z_=3d17u=ndK0K@}=D^8EnPpANu_YHwth`&U$$Ikz5*6HZ zC|D0}u)~DC6HeAdPy4?rKf+toeJPLNzb?Bi-}%HBb`dSfm$5uv_k%*gpc2{slun2T z{L*6<5Lm>Zi62n^!ZZlBVLMn{nxF48UC*esgb7s z>(akY{-gQV&cAQ|)s4S2D;)P9TAUnNFL*(+^_E5L<#Me@53^n+28ZVpsd_lduvN^2 z9f;a70&ilzcv}P=vL80u;M(eQ9cklp-YxNQbyJ{}(!$CZ8hE)YH9hP~+kCWNC)7r+ zRn<4ZJ1<>}@gG@1;%c|yf}+MmB} zgSHRzp5&ir0(0gYfwrcdU-FX=`^!CkU6<7VFP-`#sf=FdQYum00hpy@D-LlN zpS^v26-az$o&I+kbO+*Vuo0K$masRg*8uNlEUA8PAnU6i1@gIBzo_LDORxwD;E|+} zpM^B#oE=d*T!g(c2GZDa0{)17F(n#vFlUCa%As?SFVw zF!fB%XT#vas~_?i0B_d4m$ts=ND`JC#jOv0YH;j&jY!*!+Ok*|%XuJp_tb%#7-3n| z^Z?r*lD8aTG=DP!q|y0%qR7I>L=L4FY`M5x?mf85Y*2Urt5( z4QbY@}h+hr%(Ahs#W?jdjza;TgzWz7T zH*=OPW}50O-c@?*muwb9pl%nIpQu8i65or{9^U&Qf2SD0wNG)T$BC(dur&@~22O)x z2_vgM95{w3N34Vl@>;{&3T}ZS&e$L9@$|ke(gxcI@?{r;!qv7s>k_MoTeh^{vi!Zp z(#Wm<$0O*s(F8mLFoyy&M+H8J&(a!ZSbe3u0>UU zmGd;pGw@A-1bnIne!IQt?^>esm(K8&B*1s5{`S)!YUIB>;5V)FpIjm8pFQ}`?tnPf z`QwxR9$AI{7Fl)Qe_t<^wXCCfFBKyprK)lCL@l3$$^=?;lDd1sD}$=gulVr&6(&xl z<~_5fZ-38Qc1;;Ji@&@4@&(3TG{i&%@Z2X+&;8QneyQ|g+7`qbv_~}_M^NyzJH!D2 z?ZJnD^U!ebEo!Hj8ed74%)H0j&Cowd9>EgQdzr-NT#W#Qo2TN)D`s!mb{CHq>0jTy ze5lA)uSUxEk5Tc@q58KG^&bb^|M^J%{mkDcyT9px=8L52##mr<{yr`0UMn1%_--9# zs6W-^P4ePwb?`G&AcovED{vqhb^(T(1S}fzVq+ZSU3p@$zX>z)YQx*zE1rpQzr?=O z-=|_RVu8kv~%7!>^G54%2RgfzluL z`afbEw2=0|j~)cz8f75=iv~khuCO)#kzas&bO1l_e;Pk}iL><6O z%xt*9lt!HW%NOUNu?V-}1JTvo@4FW#3}PP*9z11Z2>}=3|LvlGzO>Vg*SndLsRmDw zYQ%nNzkLxF4R!;eKThF0&FKA&j`QmhzxLtkT}n>|Q-Drp0iFN#xfQbc-GIm=*`~az zqoQ&Gh~fs{-%~&TNCQ;{izaC~9R#urNoYR(J$m-<*+BosUi`yu{CEFP?Mdl5+hOT7 zCSdBxSpDjpdT`MQ)?iY6Bna!C%!7Rw1dI_mR5Vn2>k?3hrb33!GP?ulu*M)9q_l$= zLlKlvfLCmFS-Q|YhZhNiV(bohO#oC~oJA-n>i1FwCg)Wk5>lKG+YvIVaF)K*H0Lo2 zTU{|dAxH838P)h(yz(ET=>LT_S_q*8_znx~_j6o+8_Gb)I{g23&se)!! z5;&`4=FfNCaJ?&b0%ZfJX#bgw`Tyc?M4Z#B6hakXv!k{r>sl>9yh#f%egC6L{{QiB zM7I|O6GF497c|vJ?mSeNqrduxO8T$=D+5~LmZ!4*CO?P&=*?KG^V)JuoGJe0y9hF9 z0=4F6t2mu!HEh;qBK-EMeJc|8o(~%GphK*796#m6J2;{JZO?cmB~kiR*ePN~-|u>I z)(;6QPbBJa-Y)Hm;dIVgd3b9*t?Yg+Z|3kZ4aS&%GI!X?aKbJ6MSaA~#q10>M?I9e z<&L*F28X(@7ssig{S+k_S(WEdG0>AyM}^n%5e9q`b^rou(oQVIE3`Ay@!l)WnjCAN zWY%gH&NPWm&g3LK`-+l12RBj=FnFiL>-rcQ+w@sq*)@Av*HvfG`+(!g+gV8hy*xr; zSiqUR#6Z7~Z&A8NyVrhQBbQ+u@@y=cyWp@gBF~C3#43MW8S2pFasS-;La4wQe8wS> zR7#MyutFxMJ6*O8jjqkv_&#+5<|4q}qCGH(Ng74MT;y6l(W_f4EvXpVb7yDe0IvL{ z!K?@kk=tvpK^vAt33tJbUVhdQ-!p}cHR5$Pd2YiC6YAThcEC;F6E)+t+G^iazn6x(1cKtfx zINwiw{hE(qLFl*Ej5xZ}Gjw()#Wyu;4L!-+`MGT01#pg>*tL!?ycsMi&M_J*PjyoI zh_H?m%YC`a8vjAgNudRNgV}PJ@`LBzb-|lk1S4;&ab3T9NP%AVLSlx=kMWvo=An}L zEiL(b!|Oig`$4>bXhLt|sLWzF7lTKiErnR{F=J#E)`-K~2RbQRkERdg}VCGS$$LUczL$)>?A1_@|swOAR z2D{ZktMxzb=uCy6jU5fbz9F6J3d(oi3-XA-fZ-)*HzHhDpuHTgNe>=noL|u01-?QD z@Z>RR{_vWt<+$309TyMt@;FhA*Aeo9eLF=Vjm-EST}L-Zbz;=lycj)MMa64bQ(f2O zjE2i6CIRkDo}r@Moy8Xc=RRrQOsJ)QlMx%N2?W_Q0RObXT_8n1n_wNQqZgaj=5b zM3XJvLZmmefO!r++JNPP-!23=f0T#ZS}*Dpe9u1m)XLwNB_R}_k+js^p-26oUPbIcrl?a(-LYCQ?^l5K^TdRT=YI&)M@rh~`M{=?6Jtf(vA8*~dp>YSF92n)v zGEe_}uOIW(C2)fguD$a4j@$#S1P|cJ=`{aC9?I_y@PGb(25?A^GQ+bIPoCwid<>6P zmwVj$-$i*zRCMD&61#L;sFzh1kck63q%JOywv?ij@@#Qcu}v?2>eS^}&XVeJ06{k$ zhbE}P78j&X&g+h(+!!6DdS9}H;v>9ww~(NQTq%*6T{WRJN3cA)K`}U_fVQB@wm%Z? zA-p|6+5imD^$`j<##rT2zJU}){p zM04zgB9U$#Z$W8E#1;OT-llZcRVF2or}NO<>yc$VURQA))9smgR*g4G%J1AhyPu`N z?neG1YSrXEW5{OX6@cnss&Z}$`FM0iZ^T?f#%QmFEoQ@nX7ui{Fr3__5}ow^-;jvpf`|KV<)9O+_B5x`>*h!)@di z9E(SpR0odOMi8HsyXKB~b)?%TP2+PLY9d-@sG>36$vxZ6_VA9Bch63-1s-rhae`rP zaX&#Xi(_uGH`wK8^0y+jZyvaKoYk+p<{!On5;w#CrnWfPNqhK}(!rB&_0_DDKsiWA zpm?hP?d!F}7hgp_xZD=d!?eCrtp1#*W{WG|KfrPyGUnC=c*oA=M5RV5hX>)5=J<95 z)=bB*+%1~WAJ+|HMO`k0`3Y4twW_$hI2wd35buPE)S&Z7;nHXtoM7_M#JC`2df~YT z%6IXW_KM1}1S^lD9H;#hKXSdIc>Lj1EB;(n!qdz5?zZc1?i3Ycy4v|H(1dihRP;LY z$Y)yNoBDj;^AFtTsCmEnh*?)Lvv*!8eAokr5Et-h2JC~1A7Gn0rpfWOqtmLmkYKRq zGkOD|>!r&*A`MEa>bat9mRX$py2H55_bF0Aow2VaW7Q_6c{JAPJRg8q_V~b*|fy~gu99gj#uKBb%jk2$bb=o(k3{IfEj3h96HXr9!IbWoP3uq^eTfNCjMo& z1RB6cpqhf}V!){<@vu3)VZdSuBlJTTsij#DNGwz4@wH%7k4j>CdY{qyVu$tN{`>-MSyRVMm4js-F8r_ zL7bG+kKyZ#m=)gDbI|3UFl@bmze>4y;J#3^+^TeUe)68qA`RA-p%VW9V`+MA)-d|n z28cfU=$=tSYFjGJj}Cts#Kv*qcrEnZJp5OX#mk%V^T?%h|l{tsvtiCJdhTLNsyS|~~NES0QP9i7)D z&%VlkT@6TCXh6s}A;I)`yT?QGev(JK!QUppIJ5FdIfp4JyrSJ_JYf{`RhBJ2@BK~p zYif_&h(Wr3@)g{pF-jj)!vok-*UjG#LR@m;CJdu1RW3H$mnbGg#}$Y zJI|X02UG7X#L)#6au>VJuXvcQ;ZpI2;xs=&Hnp%?=npW*vG%B>2=0QDGE`ZA?Y)ev z{I^Bklsix$soo+O2y~zZrKev3=~y=#Q%7>JDu}R4km0q$c^rtRVlIe_(?0M}*Dv0| z(`oU_k`uDwbJ*>Z+?|3;Xema6z$tD!esgW_Pjs`rTtHE3SPMIa^Cn|{6y*K$H}(sv zOj@{<>LMU72|glXIDKhsDGtlm5c$f||2}WO3^=~SQ#CdH!1Q8yBA=)_p*v#ceZqn$ zO{~~r)T*jj{NARD zbz;W_%VC$@6gpfzf)m2tctPx6KPE3F%T|-B7C{?GdL)@Llt+(Noz&P3Jl30ws*6h5 z&AGyOtJJ|REmwuZVRc3tZnHU4;eJ~&M)W;#WlR4ZRq-QTk=dre!$tqrdwHe3mn`y2_YT|3)tCM&gb2?#k-- zbfpX(Nnyx_ur`O(a|Fabb4rq*U5wE|K^u!==i|dsyS3F>KHUzFqWtVt6zx>Y+~&!4 z+{($V#gGCkE&qMB=<7QxZjAn39C>bahBg8a%jY#({9apHp!1hcpfy3j!)Di~OnfU* zcoz}tLR9+0zRw9LEn2=a1O)pAYJsan-+_r%MXMggH+J2+%f*QXT#0LwnR0g6g+0toy^RIeGqb+k z7byuNi)b8#LiO`F>LXHJGtxvMVnv$hSlj%?{!L{j|1Ax!mv+7M^JU`@JJ&tKcPTty z=sv@>{JlfGQ?X+yyhsC!X(5yYorCY8PLb0$8FbB~HF3(0dbbViJ9 z*(C51>#edmn0IitYPSudxrwfYBFS$p+c4_w-LiXALfiHoYB;-AR?jwOv0=O1l1NI2 zYvE<&c=C}-fgUN6-#%Cj}WjlxgSezVO=-7yVHrq1eR>5Od9=HIkSOZCBo7WIZ znPr8JH&P#K40}0#?#qGJItRzjk)KC%I@tFsVj4}#D`QvYuT{xMDu`XoGQaRHX*(qi6}ewjhR)s#dWNav4WoNlX7%nMhFNMRm~Glfqg^vZ&%k=M zWM&PKRnLmi#7VRmB;Y@&RECUR_v#3;4ohTVK!|LGy?YvpGHUW?-?i^wYLbDjy4DQV z>(1CboIn?xgtXfnRY!eAaO54Lx)Z($jjy0yPe$5u#6&(+b!gr;aWRNYLJswo7AkLL z#3+)ziZLvrwEEabzq;|PGPkx3x2-u;I8!kw+)KrCjw=2_&vA&W>7~psIE&Vt(aqbL z6^-xp{kB?#s54PXjwTSSrXf}*avz9OCyaGTh!>CbK3I4n&P*B*0yXh*_dj@AFKiv{9`>zkHLzfon|6Q4);0 z%Y|hk#O%a{`fzm2n9^7so=Y~jtV|*cH=CnK3#sNv!2Se{b?4!WGdINUd$Hq*idFG7 zd2Y57oov^F49XSl76R$Z9Vsz|^s{CepLEqDYfFb9kAJkECb)7&h~;!F4Zacv=-7mti#Vm_Ekc{3>q2(Nvm)?&(*h5=m-n#oXAJ=d4(}m-OEk z8GJO?_>_0ZAtxc(m?hrOtB+354RZA6%R z%S7BN{D5Whhw$@zDVps2u1P*xvYw8#Z$mNW5IKjl4zjmj2XWpQJ)&RtNYy_U$J;!^ zem&gOAFjx%hHzP3xm!iTf`u-^J{Zg~?}ykG6;eK>70iUW+4e(YA`jPxgKFY~(jBZz z@86e#dVy)RR>UiAd?TQhas}tXg?P6m@cFM~{9Z9LB|wH*qju^Eba6B#PAKE@sMSN5 z(_P}NJg5rUbaY@V5@TuZ?4$YqXQgX7GCN{UQ4xMGY zq7^=8+Izbi@M>`V#rX~{n9`W$+k?Wq=#(zx^f^|>8N|EJc~Z~UkP|`S%`ww15slVib@eyvTa?b8-w&zwf^j;rQ}jc}0=cR;Vh3lRH?zUB zp}jujK<$eCkmp~Tsu-y+$A6_&cqqji6sa3g_4r%YNGP-%uRhCbO0v57$!JW`X@T+m zLop*;;uN3gQP#n>TBluDUQJE5i<5LYTTrGYnA0C6TWRP_^ag%8#jVR=%W;_ed1bwM zQ7^`nW@@GEOrgWkUepl0LrQGfSjC-=S zF4t9)>p}Quhl4~eJpZN_X*irP9?GDWn9pNe@k~5U=kcK{M)=({mDl}1qcvMW>BY29 z)8!TD$`b6{D3a*5Ez{$xGY1bF?V$0K56h8)p}wV8)kVH-gKoqsf|hIEcUV9``Mn80 zK|`dPvg^IZ*3*V~30J33Ka{Ga(Z*cKg9J3pqK3wY0blIMeKOa4M&>6dR(tEv_{Z&+ zA}MM?{^|YFw;mT+yl3J_(2^a|es``kR4bFIMHyoiv+k@=MnFt)GwX)jL~dNMNuF_- zOA)+urW9bgN|O}@U=H{TTMLuN*wi#r;6f$_k&>^NSORxRNi_N#Z_l|Sdv1!`K8Jo0 zGf`?p3ZTCAeZ`fu>6Y_OudToA$C4k=e*U=I@`-6(Im%dLKPDb*fzlQC`2Zm5ao4d5 zl8WK0kEZ4ozqdu!&x%arRl6<0%mMO=n#y(6eB;6nXXa*5EfK~>53Au;)E>Mvsz=^a zj(hprs|)P7V&)vJg&OyrhCNa3I5S7gjfRt^4|dN-R98#nXT#mPSfvUQBsJ$;W2(B> z`c}F)hXkRhH%8Ahzqi!YrTAfG{ATO;+KFo1xlYmz*~<+VyCQ9D!9EX8m+y$~;^>^n ze5tdm33rN8%CE9Z@^H$~P#RrbV0$#eQK8W$O5%3Ls;7RwHg{cL#3!S23A~Oz? z5CPggjV5yQI3tG@EP`xT}L;No$Nds61AmuGj`B zIh1))aGVp=wsJALZIM*c*5DwlFY4Qran(iyz`SM zFWLCgNLW@8n9R+t9oOcL?t3nAUMV;&xJqm>f48uhVQQ&~(uZyuZ!IxWT~iY>@a%D~ zpdYZl=oSzNNF(CEX_^`FB*8t0y&-1$WZ`CXiBM8pc{0+qB4C{VU2sxT!h;Ao(6&iz zpy!4MWNl}{hj-~sIHRWp7kex86Mny-C)4XGb4&s8ji%Vu^3XcoHcZ6qYg`=%T&kPBB+;~9(X3=Z^6jNE-plll7-Pv^1kMK?d3XceVyl+yQ} zByVu%TPF{#X%rN$dDAr!J2lYUs2%l^FMF8xJ?tw77mE|PVgXomk|!6Rt5aWE)5u^` ze_Ml|Z*_CsNOo%S&b5t~&o-~+Y3Os<4A$`gGPU%U`4gX#tM?k0@YK7*Y4oD+W<9+R z{{rr+x40lv)K}9ai(DgAtXqM8=_o;B`O@+?X6}vIkaw(l_xs#0G}UpOTk-O653H!C za;HcQE{E3jJbK;X62=)aC?grACwrFrzE*V6xc6;JYeRNpFI{X-%q&C6kbuDG*CWfA z%jq`VS0a}C98wuYRD@b!Wa-$3Ew1+QHcHpGqxi{)L{-5^1OC9MPf;%5k9au@1y@HCB^TDE;B~3$gDW4| z6CD>1bswNjDJ)^6uXb4t7B!XQvx48Y(nKUTzgF=IA^-Bo@lq|jHmBx%eRaH2uVj%F zQ%_O;e7}aZV7bZCyAkD_+=^q`5&2?Vn0n)F5{E91B2_WLGq>#61ye)M%koQZcT2Cs zvDG<|jFWW1A;IRV6uc1L-UZ=M(;`flbh1$i&#)uJ`Pr>lg+bGbvzucgKS7i~9?h(8 zQ$8TAMLnBkz4QcMgXX)n)vKoLQbEyUG>2{ICaimfh_nxt2q|sR43u4h>lJN0S1Co@ zD$b}m6J5e5e@n2;SpL(#!uP}El++wAD%9e`=9HD;GK#Iu8*LV@vg@x9A!-4~&@okSKLaoi9r;O<}Q73Ys9g58K`a z1BgI-Y%J07F6aKu+C24q(#`&#pzAjz*1`aCqh*{9-aX6rYddig&B>rCuNHFB=t;VH zf`a;h5bdptZchZ;+9LPq=D*REM`x}Ya{^f^NBnpT$gneSpDLb1#gabb2T)3#%45g$ zUDNp@N$4lC#3s7WYTQKEwzSr-niWCkF5A8g06+O6Po?%*{*)OczfbVlklqAxE10*f zXRKALD&Hzg%bKejd|PU~fmifm#K=U?AjEG@nitAEoQ+1)?&*-@F|+rSH1;fMeflqO*{ndfUN*S&^rjgU<<*RD#2 zans-mLtf4cHsljD5BkrY^+@&gp|vF3!M+U{w_djJnW!Hyo16~aMF)S|(Enb>mX(x{ zaHZ~@E)C=sm7D{QcD9C^`kT*3Z(c+-gcW(+K%bD!j3#=+Tt8(GBfHAO-@G7BdJQS` z%EcrO4|^%*PstIAFc?MMCA|o(th(wLm*3>~)8eW=8e0^dG|yXkU*++kY}+(ty?`?| zS>*j%hK+*H>IQ-q1y;<>1C3`vyZxy6pyo^lb=t*yVAS*{wVW`Sa@r$ZRpw z1l{UHl~g4vUjuLra%JF}{{(X1(|_FYnt!dLjwqX$6Y_%DF}Y;PYby#IJ5jd=ef zrRSk;ud=sGCYhrct8e(Q!w+TA!!dw!F!dZ71AGa^;Zx-c*QV8Z+<>lgE80B~pF+#Z z^0jjK+lN2y^MrM#g7A)QQ|AFP-{bO7-W+bS+i%0TQiM#Ud2YG#Tn&B09IKo^Z~R4t zw>b0u_1YDU=$x$V7qyp|ZVXJ}-HTzZqL>L*2ov?)6M5bhZ^xE#(sn)tRU9XCFqFkq z_$%Oi^}UMgIK`7E# z)feuGAeOhcKMRT3yFr$@@~-$(+Ih`npyEc43vI^|C@N>e~cgYzYt+n z6g_NH*S-T7XaBQ27Y(4+`LDXtzlwmLk}v<<(3ty69rUxOg|L4ee0t0uSu^E8>f*2D zsMFS8C!TVJ{ygmO8-FyNomt8j@z()=+~(JTr-z;1@6RgOzbIaR zbn93D{y6@>@t=sV3wU9B`TWwO%wZLpBsb{PPYLP&)|&nQv5f>pydRj6ZwuL^kW=yh zMZxn+xZA;+|Mh|xODeKJTiF$U{GryHNskbDY=QU#gFheW(uXd zz&ysHTCr~FVh8D0*&J7mOqwj%k_)HxTlF*jEkcx?o1b$NOVepAN*iz!-BpHDWwWPP z65Z`;xSTy(EKJqvdkI+JM}1kz11ED{d>a|8v7eO&g5T{B01vySk#w;jXI_RG?2xg8 zPIA$4$2Y*P67wpFO*QK>Y~Gz3|7S-9C3nJL?%l+xYjY zAv?4B$_UAJr`LFrq%%OxrUmW}p0q(p^anW#6FPUFPn!HWRP2dgQ6Ybvj@Cx4R9FQSk^o;n_kdx8T(c)7=7c;_r@ zAI3%;`v=>_$|1hFM?XOdPcO%jvbwEs6ZcqlnLtbMZ!OTu%8Acr4mKCw1#YX1X@-96 zlx9X?8Ip5W2zQX5Md|{eIS4Vu1#-schjUnOG^%%F@xV#?lQ5Y1AW}jfNP@Q zpa;Vi*_Rhii@K7ihw`{*HVK20%o6ShDVz8)`idUkfzZ4EC=Gu#c`^jlv041S2uKLV z-v@Y_OuEb=xO6s9ox6j37Q6${1>vUi4|dW>Ixf#R-0DxYy0QDi1;7xW9epW018cCG z&1|%RympsX#Pdg(>7ujC($#Aou)3#FodYtYR>*8?-!_-=+q?5Jn=6I7%Kn6QFtg6&t_(B-aK zEy=Sv%e74(cIqe`X2zF?dMn)n&VH|6jcQJ#gu(9`n%pTV8FHTZU~|*a-tx_x@RCin&ez7@Jwk7PmNT1T6Eq~F@$!*a`P2ufb z*y}YvL08<^wXq-48@F<+qKNpf-pG9J-fU+8n!md#!-9n0Js3Fi9ByLY0le z;#iLWAvA2py6Is0Hx*+QcRo}PeT|fj6)0z9VtK9dnmEUCIvaE?D;r>U{&O1t=l&Vb zsCbo!)`kH`L+Z@0sDZSgt90bRT6}f#rqpiRkB3-Afz|jpSiF(Y=$&G>lW5^?bDZ{G zq1(fj>(_&(5c!hkqsT>7+|yOZbT+wFUyTjv8s!|^?Zm(UF?UT4IshYA6=a=Xk)t{oy( zh}9>0bKFXQqn_s~Nx}CTatXp#WsyyGz@AyCBGCm-j#F<{Ini4zX@`eY?mH(6HW-?4ld4SQd-wjp^beah%Emj5MH(|vGYecVjlS$sY^Llsn~ znc6&>+cozLcX2LSvh%$3`!uptqB-Rzxcp=EV~z-x&sO_tv|?-{OH=noeb|?pXhbAf zA@Y^O8w)iPjyKv#K2G~>g}bw$KKdX`x70Fssin8+lX04SxF7?r;yvHRtuzYLFfdgq zw(EVwj{TR`&5z-LHN@J)yzvaX|HkKv8<*;^mwL{FPb;n+{%!UQ^DO6B@)5H7spYwc zspK!VD}eB=!N5uGb7%;ATUC;?tN9v zkLN?QO9`=f0bZSSK9C2ZeHhEwhF~z2Phl?|ev!OSricL>T?RdS3_e(>x4@h$OkZUz z{ow{v2~gGCPxrf+H{&siTBqTV?i8RcxTkFkVw>hJ7Go7Vwj}=ENaM!!5XbmdvggsOJ3_1(!a}9g)<;a8M$eYB& ze^5iKaigW5p+K=a{}qq5FUpcD!Aw}H!vP81`!i7sg#N~Bj|nf8t(1u-7SkvtX3o9O zSxw=p577M*xItg_BcHpQ^fgnFatDLU-V}J4@9JBQ3gv|mGxcWU?;RcjYfUz{8*h&= zQHRIsa}6!hx41RKI=&9$5ywveQn+jyl@l&3NRk2#yNI_ltw$DmZGK7K%ebB0!WYul z@4(wrZ-W6+N5|DvxY{b2RhDM1Xg#Y-nM(kK!-~s%;P_1Zfok$K4g!#QW*DO%UOPwJ z2l6JhL#JNwx`(w1%*9NcuaHvR36CA>XdopD;_dDhF*L?*zV&jRF>G*bt@RQ&pAUDx zQROdHP)f?hx!BkGy!j#g9qXl+GTE!(@OkT~dU1a~-&B29A zz*2?EvR`rz`vg=dXrOAF={XXPc@SA<%+U1=AfKDh7SmgaAIc}_20Ha!u_8&l^J5lV z(dihBTn8s}A3CLxAn12Q*HF|$l029b8=0d=)UAV}&Jx{X$E%Ae2Q0b+u(BsT`EITq zwHKZ(8p~a5&Beca4%tehq8a9>8xg5HxDJQDH?VNvc(@n~jv+Jbv+=a8%@TSPZ}grz zpb8vVmr8^W(8EI7uT%^rSaPPgR7F{?q$Bc*(&QBQIV;p&Dxw_d!zP#kkXxECh7!BX z=4Br)x4muj;;X6;e=HY-8cfI`f`# zT^P^iOC7%xdD)8or~xQPjl61~~W z#0w&$Ues8Mpm$fBP?9noPKoq3&7g^7`L(Bq@Wn=v03dOLOtV{h^~&k;a%=1$fgL=U zay4RlIX^G0-U8|{?~nn8&=I9(to#H~co}|b46;K{@Y2T^_SC`8(bAGK^)xTkL%JGS zqFPh9>ybB~BW!g!XR8sr#X2Q;KkPoFE);`6&(}M4I(+8m>=s!xr9ak45yT~Le2Im< z*xp+ZRP3a?2%5zyBBOnIC_t`FXNC24o7fCw1xfWDRJQy5FbYp;{*c zymstCR42lwCyb`jTvKfAfY6tN1dqYkxd?yFKJ{>+pP<`I#Law?rOq^|U{zcbv7~FU zEz(P2ra(n}oELWX!KcP%&IIUvp_E0S#G?;QX_y91C&KKt5Piq6{T*;{GxL7&dxCU5 z-Zj4k@Xwu>-@9NNcrTJ8d5%`dp9-jZW6B_TC9@ZOMH*1&edTx)sUbu6n<5YOfJFza z5(I*r+#AoVc$C*V*ICYL+k7A?K`WXQvn1Ge5Sd<|&xrdh&spzum21<121L{fUj z?xLGxo5%V>jP*-TNvYzP=%m=A^;2bjY=bc+!w0B5-hol+S&5E;ykjn(>tR*gD=OZL zb}^Q2wn~j&e)ae#s4@mqdAq=!$UdCa@nC>-fEV3#!AlUE9kcks3Gb|;gDo+1$4mvV zgla9Oe=_03{sg_Px0$)pMD3;v33^gjO2s*fRj6>`UX64dMr9no0;YVvD=LY`*w5l$ z#cyS;^YWhus`e~w;vlV~Y)qq0)0FsoQj*i-4Rzg7_tA~zpr*3Tx5v_jcnhOC+__Y{ z*L*sPB%z7%4|CiKOwKl81%UXYq?n{ou1w&4a>kxZ?u8YKB>t~22qXL`eu5YPrs%6o z%exT2CCOSe_zbK^5%3Kb0j!=SVWMd4gc}EjxGmpm@362T^LP)X|NX#dJFL)~$!?Z{ z`j{$Ai;V`!&>pYw9R%Zky1m)wb%d)o!}wGY4q;1VCLu4#Q_HTCFx|4?3vGLyMkRn- zgbSxqpAQ69k`a>o{y^G{V%vUNq-#IBg@sy9#oS72{c8)9DN=qZ!Qu06Yx{Wp^KR;0(?eRS9FPSyw$ zm7;VfO(HrHO5}|Zk?kPfH`s3MhaVYsA{^85HZt3A{Zy2u*5M{ZAwdf>x zm#ewmqR?79qnJ|`b$`QcRqfai`!aNjx)i4yRLI=QbjfRUN-;#O>?w#!1PN5q-`#KP zQ>CK9%ikQDt%BUHSCIIcWI@6_f{*yLGQPOBelEMPdkf*n0;$18ZEqt_H9RSx;RO$o ztw*inI_XZ|?48Bz?s}yB(9J$}#dZ2+;Rn|?>lrgvbkFslV-zLY_f?}7lOk0*_z7zE za;pNSW-p+Uk@58U13#P`@J`wrQ2+%M4nmjnIdnmAEaPvdKA3x2t|^W6rScKInlVcu zrQexE1Ure~>A{}>i(TYh^;^{x*#pj$Ak_6n+55Z2um+&0kU`C2SfwFQ@ocM@6(9Bl zcebN$8O%PkqZK9*`RyKOzxX1M$_675DJEa3?GHkG>$cR2%vA|pp4!tk<00iju{age zA{smx*9hnFZDi_1vzCbUtCHRnOA7dkzc9DaTN zdAHIcu0wx_aP?SfXangf5LAg%O=f}Il(Vxm;f7o>#_y{K4y{!&_7Tx6a?KmTlt67m zHqNH+Y+yzBT>YA%9kOR{wpi{qOQ_PCr}i2wUU*d%e_~cGtQLb4=v1)3+GbF zOe1cv-y~1SZN6gYEoPU{iNPpmY4#(VFILSM^B?xk-~86-%vrr~b+9R%C__-eQtK*wlg7?dQQr6PqgkH%*hDA*HS#J*Gd{6s5> zU-dDjW;*n)6som}bkfj&K;fCqC7VTx%B+)Q8w=B*6u$TXPO!BzE6in>C<^;Q0Xv9y z#e|r(i)&Y)z9Vlcaz6YP@5Q2PoZo`oK(#Wk-C<)ZJ(3)fB!kYe2Ai=g0-4Pg{#3_$ z5ca1|@M$0+de~t9IMFr86A-$un?T||9g*y;YhZcurS=4sg?QV_aqaaiMm{>IZ(YlC zP+>A}d&-6Kq4kU^tV(0v#3^c;?*|qGx5K!kvK1Dbeg&C3KPL1Z9qjPHP2W#b+xf6t zzqSO^gnZ`kBY%Zs*}P?+MD3|YDunZF8JEFk2f^#5EJvxo`S#k(UydQW2Lf#yL4e$0 zx@9(Y!|0LYyV$ik)0W&z*PdKFNy4rgrzSMa~kL!Oi_uf%Wwd=Zf00mKs3P=Z)E*~YTezP-md-#+8~ zHBE?fKC?aLzVGY$O{JFq+OtyresdR)eQB9gm5S{=tJ@X1b@y?=<>=i}sL)S2K|_NH z9S|_Vzeu8`kEt&HJwBT^Ch`*c;e)CIb(lJRwGRdvbH-{qH}Itc3sZ!``x3Tb6n>GM zbYxvRCrXNzM4qk;FJ5+ZdA%KE$%TSxA>G*IMyK?tu}|~ z(=4uhpifQ3_=Kjkk)UXjP7r>&HKSpbnTxApyddi7kSCbN((e8u6;-JpdUNBpc_3s2 zvH&w!4sT5OWAB{MJuRH+_O>C`Q~jh@Z4AuR3z)htQiXU8T;F*-S#|#}(Dk_ci_a1q z^;wFoB_T0@B#CT9oFx2Zj_A_{@QY=y>m}>`Tw&kKu1+94*C}l0rZk%&c*rm&hK~!q z#T5q{^%5iTtrR_nuymEf;bAI$u*`xiA^X!pQI!QiM*8CJ_43|u_v;1Ech4zBPQQRrpmu@36N^NB6cb%}sGKhocmRZ{gw9h&|BGeszr2+Hwar*Lbt;O} z@l24$eUkolE;YLqO(#4`5+K~3?r5Q}4x*gbeK$Yf&2wU!c+pZ;qd$7@{#dn8H+)U? z#`RsVdWIlV}6o0Z!m_9=J6Pfp#SdS9>0ugkJYCt#{`-T z?~o)5or1;jr-OwuudU_zBNiTo(D^N9JAq#kqUWvfjLqyZT4}SF-^7u+ZoO)2AcM&J zkLq7MWiZOom?*8j^58~*@7(Ly1@w0)uqNlh2|q#rbcw?i!>b}zj`4W)dJ0y|Mfe*= zvMD%sR}H{QdY94ZBh}}u_EnXa?A>+AA*|V%D0&ec=oD0@;X1-M(3Bjix`~qEio`YX>zMzz-7U!&!!D)= zUdVorpZR1Muo(h3KRgK>P(zo6b}IrR}J%Fcc_U!w32wRRfh!GsJ!vyS?dzY`!!5e94JN1 zbXWkU{OcKZgULq;e(dVJCeNml>HL_M8$SM+U6+%))Of>;wf)$3g~=*+3y6xRCBM_B z^23MsNWiH&W4>CNX~FZj8#OM$hdd!~JPDrI(}~WMfd!aqAI}Y&!-J(9A}#z9sS?N! z>~nL%dmc=9YYWd`Sxsj%nwF~DE4=>uT}pO1rXipuI-3=JvofcvnFZA{v6XmdM$PB8 zp=VZVPbs`teu>`MDVN@k(9`WjPziMfgS~1agXhImH(qy8g2~P$mF@Fyf%4c$HG~bq z{^;0l{nGDH79ruRY)u?$8EA3CDmUvsJ{K6 z$+$39&!xB8Oi1Y^$DBG(&hN2tH1i3y-Msu`|I2!(gxM3m|D*b zQ4V$}Ns#ysRUPIoMVobum+kveIn!SZ=;b!0J9^gwjqs#n(TT`NlAKH=hR1Pg`J>%J ze1J(j!1;;8FXA{`UI!|bIE^{&&NQtzlza<);HuLkIp8@@k5bQOBIwkV$~0Q$KW^GUwxo1md3lR5u4sgM2Y4-cf@pm0=ytHfM z&Q6n+^FAD6^$6s1rb3{4Q~gels9trYRJ4P<8;X=u^86KG!fmt!1DvC{LZs30<^5%A9mRw2e9a6?RH z&?jLxDlnoc6id%sisUye0ar++FMGJ!2=88(GOz(Qrf~~0L0;NvV$COt=5rsC;f`0n z+k-<;=wTNN`Yypf%hA=TvI~SLAlanfk>%w&Un$tQQHx|vdKuJpzZ;O)R4-}$jM9V+nj=O{IwVWG6 z^lMtGbPwccJ9w0YF@dZEfmUT!RQb3liM^<%(6MdOZHuh-)lMxF?%kp)*TACq+c|Oq zhdvuZbWXqaU28D+a$eR#Y7aO&wJT7L04Nzk512E?sc)t}*1iVXHbNt--K&}^ zRk_yWx`rq#WjcfD8Z9Q5dR@oM5VO+|4cwLsG197j9CPbhCihK{4FzWj_hdpLe+bRq z0H4sQlOP4671No)9W5e$`voYKY3PJ60`YhU;aDm}6^-sR4nJkKbf}MNyec7&y-IYHw+;B3zHY|&@~L}HhDi266wwt#3*2E2^PAjZlGW#d5{uT&)t4Wv zZ{`F7EJ&kk9UWB-K zb%0~L=uhCL@p3GcDM7nVeDZ*hku71U+mU3j;73ySs=p<|sKI}L$(3*o2{2K?x8S6R z>X@?*qlzH4$EasoH`On_qE^ye%-BQ4hO0}iWq^*{=mQ;xQFoPo5D^_F#*-WvzRnCFUU8g-lLE_z(+Mdv>|=FqL9UeRet;zOhB*{QiK2b^O%% z0q@c44pC0U%f)UTAlOa2KEsu_yLX+Qxt7^}7P_9c&O_#|I#gETWj5lII3&QqGP!&>6FOd_Q;f?xm-xi~Q8%1q?Co4Moqf zOfFW`6EuLQ$ve}uy%czwWJKsZOgQ!oh6kisRJf(TV`^dXXxq>ZPK5O=A*;zsE#T8ybV z$UISn&29iMzn4B$1srgA4Iw>(74^!TVf`_z%%VN#T5}gc=wSLS z`IKccf5;14mpk`tnxQ|7JEB3yY~q*T3F_l^lfewS4NV_=FXm|mwiXr-o+)PhKD$Ls z$LW4>5Y35!b-gojw00b*;8&v+M;rE58{`?+fSWG64{U`eqLy-VeF;L%1fxl}44k%H+++*3SXtde@ zHssaUxJxC*s!NAOXZ$&8%ej8gLT#qy^rfS)|4I!`tTYYc9)G|b+kAVYS@g|Ipgx<0 zid0ea_F-h!E)^pg^gdx+(V=7L8qw*SZQ64Ko@ZI|SGdr#y*p0;u@Eh~gY#~CiQVmf zCvTayIx*Sr?je#}mU8l3=P(q3?w0G_4aXO1ZWx+dI_bBuHP*cvxV|WVR2Bvxd?RG) zHn#(HfB|F{f{`e8XZjWAq0k4A(cz_xWSdr3gCz@N0_iYhqe~$X50c%Ue`Q=@A^%Qd z0*00~|0l1Ak?m+q>gtBHNwZ;gkmUKp5JZK`iOs%1cv7zQjVNrGn)m3DaM8t9gV2#6 z;kE;<(rp>xVwX>jq7Ze*&-OD0S_=&GpPgNeP-J;lqt-bcleGQDAWz(_Uuw3vp)KfflljE}yBhb=Gs~(_?** z5N-}H&igOw2;30@&Eq(hy~R4y@r4(Gb^Ay%0PZ>TR^^%-_$BhbpF4ND6PcbEo&049 z1+EE1SIc$LgLwwH$XR?BgZFz_ke-;{ThS*?$!H=(wL% z;XccV4oPK=s~1O61I1~v<_F@D+*iF+XjgG#Pw~s?ML(!dx4N1S!N=${166M8=kUmO zeUeOg7dJj~)wb^ye)EK-=SMw~lK5eDmCrRg6=5l-(=l&xDi2!qDO{?QjL%f0dUTrV^mZOmNSt0YZu;I>o?^FE zHMw&-rC)psT@#OLmd?RGUQ_18f4eqa@gR8Qj-;`@@y>LC5n;8Gu+o-5)aI{_7KIE- z>^0b?iQY6w4tfI$T-4G9yU%3;(8TtBQ*kh~u)~+e^TDW~;6`HbOH6g}J*UGOZbt8Z zAe1eCQ#w7U)i7JNF-M>G|W;7QnFM6Uqd?J{5cup5Cp@pAh`f%>%*$n&bO{ z*W|!I0tMzFzRa6$%1!#-Xgk}efKM-A%kN z0My6Kzx9<(4;E-l*Q~%MqRM+6$GSyg+XlXKYE6mP znWG(g^!^C?$I~GIw~pg$WojLWT}daag9GNX2tkSoAh8%jt2|^nGXG?3%f-+!9|%24 zMEf!QhOkaBXrNtoepl6^G}+z5u)aKm*lUpb6CfVga~Ap+$kG-_{Jw#QEHaYqH%)%Z zBQ`D!mXshPs$k07yoth?wyId0tc*VyK&Y>ECU{73e$;JQxK$7Y@XvCuVC>V2oL&11 zO=sq$Jla`ewz!B$Yhnw2S?8|SsO^Y!W}kg3kJQ`JsGINl27!=4PB_Y;46Y1~0;?co zG6z4|O3KQCJnmXO40I*N;9yh_N9;!rEHeEZG-KbevqvQe9OTkxN`F)iaJ%j_iHZC6 zJ*`f4^Y!8D-bLQzQL^!q%LF79 zaoP$Wqw7WcAmFZI$eEFid@fx&?%*ultHILWHBvT}*LXO;U0aRJmpTG`(1(--0am5S zdQAINTUy|BD}2JtVAo38kEz)NAIYVhpXd~lOjTtQA?USY5;?`4SN;rj?y9VbM5txP zEnaiwTtZS}zw1&k{M$x}(-yzvb2VP6_f z!}EBhojm6|AAQ*!DE^pyJ^R_>u(BVqXDp^$U0Iw{c9I&@vm1GXzEC_#t zc(wGxX9sdh5bo~7f3?t~Au3M_Tf7caSk9Ju7Ue~?HW{Mq-7>nfzZY{NoN2QrZKv{) zFFrFM*whqbX~}eFA^#;cNML=A*G#Pesj%(8OC4I%1 zPkq66vT|BswNhO_XRtYkc(4e}c&HIC%!z(+rQ?&$w&~Z(={r1H)GX1l5OGctlN+N| zXQ9d1gKsI`4&wX@D)&{n-0|t{CK)@iRnO|jT$e@*-+xPadxc*jV3E^#rAvjvnav@Z zKSq0G2LRVl`CG`&71pto?t}!Z5IB)Bqc_rSm(-Qgs7aPAc<6xO(nW+ujoa_Mv{?Jj`m;K&?Cxqc&bi3wqVk&MC2-`#|b2L=e z#y?j#V>LA9m43*tMt*OYs$Vf8waBS0c;3d_nR;P>fgho0pHm1~H+)}p0s!hkgS|Fl z?i-<28W86ke5EqYjI;Rw3RX0wEga=x_Pw~rsua%s8uhG%sC$Z(7M>~p$NvPU&p^Zphuw)0WH3a;bceo*yOGkueLLf;U`7i66VQjqTIAx)2M5^U9_I z6_U;_$7$_nwtd^l^0WW7)5_zR@HqPDO`)oV3EWCEAf)kI*Cti~2 zlhIBoPOsw%-pTy^GWyR-SF=2tWL_TUYmkjszi%a38Gfb%@}!I}41FAQJZc|u&+7Hr z<@6q|JGI~WlE-{^mW+PTTvsGunruu7Lm`3U0jDW8*b~kNg5Q(%+#Ol><}U<9m!8}a zPk*^6oR4$774m6Y%G4x$J-?;|J}~G2WNs4JKs!5SBqb!E89G@t4wYUjyJ?mS4->=v z1(KLvgNzW=y5_Fp9ir6J1zt-Vzgj$& zTy-~Tad!K2#Sx%OW8KbeUQy+5uKb(kC#L#$L0S?(+JP)ZO?@ zoeE?^{~Q>6k$;4P1pter?z0DVWU3dLoH6a|s|-*#>0EEYH!Z2M%Y(S#P*0k2hN)rX zUM{^FQFuWfW$|^$x45w@|5x|ekB!*m_xJo33w+aouzKLdmjV1A-LR#KP+mUe;lmfb z8pr}|{FBq11>fjxYn;)&o}|+;rogpm&@5qKFx3|qGeuG^%dkm&Nf$~daW_%XGovkc z^zVXv^5}Cj(%xH_n-?N8SZL0)|H{u8F{VCm!W*0EVPsw7Rs5d!34JD`p$xIG}Sp)e_6R%w>m*%QB;nTWNxmMd!;c3&(l*k4JMxVu&)sw_Nvvq%qMzD4U8pmNka zLcAhQ>yrp^A!7~C!wq8of}E z*1T;UIrBk{^T z5!zoFb~)?XT!_-qVf3h*w7xBpPa4^us9k#(ve9)*g^PRehjDgpSFA+glM4 z^gu(rkX1ibwkDE#T)KZiDSA$I zbKh=vjT<$SF6D_Py)~Ng>i!D>!&K~#m4wtaZl_>E7;QOBM!31Wrkk|enz>Mwulqr! zDZ=Zwmz#Z8-dkM|;gcoUQd_*`|*DK1GTkIjZe3nNfrZJb4{{V80H>No59S-DUPkPh28GQCLe(_)+)-mrdL|h zSv&T_&Z9h}F>2_tJOw61$+sRFlYI1z*T3*5323ujbo&vnZQCEbeEDVUid+oZas4#%W&(j$<=l}38HKz)l$ zsTS+nOyStY)Sd&NqAw53T@2;ASwj#@xMI0>B%9cM*(SoYJKzKzlICD-R^^EfoT&_F?Elm3Sc$T zh2vGWKKePtk^;(zJ#L5NHJglKH&~1%ld?ND4B&Fzn4#CSLx&>6-L5?F{Jq=ssV~FP zm=J|}1)rhf;#;+8zQUK8l_#z#@Ma&35(T<5YQtUaGu34?ms@RsPALBFm@iNtzmaz6 zd*wtD^XRu+=HW?rEyq67qB3ik1rQUyBE@LqeQo6w3yB2sURM@d1b#3$LG%@-PII{C z`*1U-C*4=ygIr&~9NRq9+ggoNKU8=;I5xy)N--7kIne%9hA zBt0P~&bx)x@{w4z;ysPTlIxeySq`B+&Y%&Z=$#INcE_mZgRe8TIYerpsy!h?EH_); z4>Lvj63Qa6s;=YbT{Yw;rNfY#1c-5yAjvuGDC-R0U$G4V9hLn*(+nzYSk~2nvcoJU zYnB)Bv`sUw^e+mf&HBGtr|rKz2B7tLLT|A+og3nXdyu*UIux6&Dh+hL_`m2--V;TYDmqp6psStX(Zv51=j}ZGxmhj3nrn{ z(>kvZ?hLZ>@@3)bgu&W8qR-01@(iZ2Z3-&mw>R!Z(91Zq0(=~q`HO8L=C>-Qga4VjS~JBmQjIc5tz)-2%grfhQ6171eg81{hzDe=pN zdan#UpyA&RblbJQhNPglEYC=`b;ewsX>^*&Ut1B|CoSr+ox4l+ zG8)fbqOe6LcH42N$qRCsuw1{el2oOI(_aMajCmpTtMKALHv*L<;d5uhNX2cb%ct2> zx0etNKt>^PzhGxb+OtpkeHSReYO@K6aXJ%d7!}Xr^)KuFv$h){^Mi=SBHsdTla}`n zsd>$8#o5UfXtX#_g~OsvBAzA7*?KPlRp^lPFTf$vKHAp|&-|)#mY}J5yY(mAk%FhA zfwBNQ6s62oJt>+o=ZmUMHF&FFxJVVf?}m}<^v_Nru*sD-z{9p(=pAI1%+q74VH%y2 zn1k_=nmmecN#9i&nH0Fib*tuCh?UO>5yhvUO8Xeo<#{B#uX=b61H%OIhYax}-ebO# z?BVfT`t|&}lg`H2W4hD@Wp)-c?EX48Q{}=A_r~1S3RLyTmp3mOZvLp~SXiR`%c=-9}{JqCQRr(Z_*;N$bz?_~#Z~)kwIqg52SHJf6 zZVOhGt1$nml$ zO(Pr@sN(}`sdVKt)ff2?)a6U3oZ4%{8#*?ZZ{t{Kqa=8Q1K{z3tkOY_fMq%PJ9kyu z&sl;zqrjJtV7vfdI4pdm@bYS@`50gL^13`HiD?6guquWp?_vMGnvTchu z7ltn|0!7J+m)d|{<752nnj+wL4roS!gP%Y12HJpY`n^w!85n#*1d?R(P2-Ex<1e^J z_WfCcAlp4v7B3UCLL$4-IM|#1ji_yP&|{Nd-*`{we6~;K??3+u=!xc|KY1h|KKZrm z{e;BLrwLMY7nKe%5*-Zj-Jd7@t0)zyUeS#z#aSn<0jHjp4%!tYt1=4dfxP4J0RZ;8 z6lEC zUq#g}4)^0>3dh1=MtU{ii+ATR7@;6R;5>mWHuWQ+b$`QuDdxY*Nl?^xf%upN5h~j6_`3k*|>sRhR zR~2xJW`*@S8klz8iVu9rWbu0q6QVl#s*p?b_0GU)ewtkJw61JFE2d+vf&K!V=PBXc zSXVv^g<9MkbZa9ApG#*Rorb$nTbITv*(@vQzD_3;P5pw3_gJ685vhr$qSZ!#I2;0Qfrzwu*9Ygm||pnezysLdCr(>L0Ik8E3B9V7A<$IO7Kqmj2 zJqX39GLdaQLAD};LzlK;%u@vucd$ZViEHhYHGB2BxKV7HsLDeQ%N}j(lCyJMTs!`1d zy+zUgI}(X0rZ;L$tVcn?PLxuLhx|;wW(SJvF-b}l zUn{vlvpMFwIoILVCl3e=t4GuyNMmfCN6jvm5927zi7>lGCFKrXe3qOX)Tdm-`>_5# z9XspvSoPgS8hyF$A?i1=8jK0lLTJ|X0+7AaJf&Br9{m)ASPRK~($J_%P-E2Q_i!Hq zdp-*c!aLJnfs0m8OxV`lQ@i8xyl|PKNO^w;lkC@meQ}9en1*chrXpD)v|wV}A?NVL z*rcJEAs6-Ede>#dm1eeC_{6ptZ{}u(T}5QZLQ?A>9ofe7xcRmLx+C2tKnM~a^x$lQ zb&l2Av~3zq1>SpJ+p%@`N#kkOVr|PLqT*IV22R2C0>mDh)U8y)gI$RXyat4#ueB8y zc9MBSs}tig1-*Oa2X#P!YXLCPk25t#6fPr@8deV!(TGohV&gK1i!<R%W{mI$$`DN};Ptl+p?a;J&*8PgnoDOE zG08KG%ha{DNcIRAa|9uu67S<1=(*R9#`=r;9S^(eo?f`h%)6Aa+i=Wt=$)pCqQ-rR zycc^nUJ3ja)H`-|ooMw8m9904((_hsWVx3c;BC4~smm=7HX+02P?fH93hU8AYsCwr zY^QjOK1I{!hbR0^R^RqlIf!|0lK=Fk6Inrz~1@R&LL^W^4E zX`ot=ST*14?4V5Zmpng6zXJE7+le{YoX8c62{DT<|HSbM>e>_f{wz8<`|p4$QqCVC zs+>RWbwG?6noI;dpKJmH0YY|wrs4RY+?cqXd))o~g zwD-c1OaXoe%fTgzw>(~SPPVAJAC+Le#Uj71<8>H+q*Af{Rm|^1K140Mbznd|bOnxZ zpuc*-`cvs|D(;XFnf>zq9>(Cj8&j_M&&7?efg_? zxge94z?)&>7fIj=lpTWY+es=+&m+E3_uhdFZjO00f71JeU2wSNqm(e&>1Zp%F}mbz zm@UiyA)8*f^c4B@+AH>e*PJu5z(W4YVNhN2%3@@seQJO2SiOjU&TO?gu?q=hLv)tp z0cpD{pFdfN?1Lxhr+O0NxLB1?E5Of6;&N)y}#D*(1m$`U5ht1mRvnx z61m0mWj*ceR&`??Dqw&g3J2g}qy21Yr}e6lL0O8@VW2NPUAYY)ny{cC{tQqfg1 z{R&O){XTv{tILzSVslTtlj3@^^~dW9R4060Aom>lKp;Fztr0V=*7$LYQ_a;*zf(fK zM`o27&@!UL^Pv?^iu2K8xhOGXrubP)S@}Ql@TKUK)|>ZF9>U*PV-2@g+_0jr{sJ)+ zCR@cSb~JL%V^seFEw+aU20q3=8wx{d$$q%&S5AJxaLJBHRXf=TTtJTR%B;1M;FsS9 z3N#d6L;)|o{NbR#al+Q^Pdg}a9_|d)lLVx&QSkU!9|uM!%eJ)2iCvIW${OhCe~42H zyiulg{*HkJl?~pPP8#Ue6z*09yF)JG$6A@^t7kaEP=Z`uc)f zD$9x)W6f?@gaM=8t7kh?yQAG!;r<)X*AY`;+BH#S4+DBBmDK^O8@I4Ij;4SZQHCyt z+4T`&xn%rTq1L`Xl@Oj1r&>kbJifSfmux8t@h{L>ln`*$FAxJPYR7Ylv7ERw?sAD4 zdV|S2`uOAc^b(TJ_)gWmH+7ZozDz#5`6`#IifjTCcs*jJolWm8<+lwO_?y_#*93kE z<=rJxk5b8%F0M=XxU?9V!El^K$wpmeGb`-%ix)l$D;ZnOLe3^PRLHt8dC1N&}zaRRI+QQx>zhH&l`J<%e-0yBSq^ z?#G)5r|>2C*rU3rnxWHlw_80&^~<#=JLhaL(FEIM&bNnjVVi%F8flfu3oKkf3;Q{d zvSWc#Ed=}GB5ml>pWuf=EH4G^+mt*cA+EnJgm~ODX$bUg;Nk$>4+3vFP8-irX{U0} z(XrU01c7zLBW);~wkM;9N?L528R27|k|X&YgEpl7STieJY*8a(8NvCsj7w>Y`Bxt% z=x)aDa|q^&(qlMG;N;<@R~3uwEtf$D$f=U2O({6#4-_++FQgJuz+N&xNjBp3(#xfCG5=?ucH0*i_2FH-|Wb3IU( z%;iMvqX3UU=HaSFs29N@ihpcp8T9sLlpO^RPZpueqopzqC8xsdC0*C{e5Y+^mu(*r z6?_GsR=;?qf4~SwHC6WhP8I*pkGV8-_jBp_i8=Vgl{UHWIJc^`y{}b9OMz1tVnfHG zfu=7$z}vF@WcC5-^)pRVbW?_^p*qD}CMz8dS;l(Z!aKCc_EQ1%QPP8krr*`r#J;6> z_rNH!=w)CAV2!}O8~~Ko8wsbBA<}2OL@aJB+3Y_zSCQiyVM$j5h%2#pD%);`{}{k&wmZ5v@zf1jyd*fwqZUSwaNMm zR5h`h4Hl-~qQaVKwn|x4atAGk@Sc7;2r}<58`&47-M(Etw&eq$z~XvmWF;|x=TJ@; zcV$<0X|ertwI|VnKPx;s8}~>h8n~PU?pDNgvF(Vg+TtLXqM*Zc$O`MKb6K&EE5d#N zvi|T|W~J+T{n}mz=uhtG->davn2naJb-c#z$a_i`2gd`XO*zqSp?Kf1>~Mh02S38Xq&9HdpKwZslKd%d7r({R0iEbm zvLzs&3#Py#!c)3~Z^4vt%i5YY`n#IZEJeLk;Rj`iPE4S`$y;wuW$FyaQU`dlI*SNd zt2{EVik`M(;nbqLA)mTpe09{)B7RDQ#RiYekP*%cD6)L6GWVfBr#nQLOs8ONKI0iE zDJ3)m1QSHQ#G^ahDA)ZTn#j$`-$*IH_xa=&tR)^g5NK3rw&veC+2Fl1U7E5zROz}6 zV5PT$=}EFNII?k`fHhIO+6XP4%OR0=te|8#WlbLOC03j9#@sD}(nL10DlLrNJBfmB zx^llXVJh3cb}Udw+5y^AIP+Z@E8Ko?@6W-NKV{pT8DjIc(6Aaa{ZmZL66eLIEi+F`|?JE2FBZsIZk%*rk{$P__+TvpbD1nVOqDM z2K4J&kJksEyFpOZ?Y`=iJ6@1$DfBbCAL83FeTBK#M{| z%PB1=h@F7xXgA>!v6}>275}p2%fAJ?Rk_E&PD$rEW76-R+@A5~hxv~&izpTi9vWs# zyyh09_{4w$@KP{-!VvlrdS3R>n*i8R{coE2QK?}|?MMo^5>aCbvn@+yDoFOhcJNKB zh-Q_>aPte#uRRJY;EZnK zM*?-A5!9w&&G;{n&B&(jB^wOWTX_{(I(licCVXBuMgl)D{~Bfb*r}4@_hT#T?w=l= z*-aOnRbDHzO)=M{cVS?g@-w2?x|#*EKOd;t18 z@ji-1`39t{5aGmC|9ThacgYhCwnnK*Uw0%MwfPBal5&3n3=_g@DpUTrIduEk&449Q z=k|x`R4hi^fYsIVkNus9Y?U#TFgDIXr>UkP&0@lx{ZU+=2aI*73FNO5u|TxJ4!j`7 zb9!`JQtoaV`$(0kEA)23eG^a`0@0{vK_$JHoPNY|c(G823 z54=V>SP@O6Ho>>^lm;$B1RNBDCJInf%=BI*^`RUgPmiMssPi(8gwC|H8-#akZ+`Jp zus`U$D#0EG9S*)t^lW3BJw2=aLL5?$``sa0axZEHbgk6ods(!3~=JAR#m}xKAF_+$x zSh6TiKLx*yZfm~!!PRA)DFePVhm4?603VNY-5`j?!SLc{qYmSxdE<5wkF@RGK1R8O zT!d$zw>F`b(^GpGr5B)F9zdH#537b4h3GE0Tbjg+y+jd$%RQa$^t*}nqg_fij{chIIWn~=S1rx=31Hhe@tsYpaMAGLoEVq1Wy_nC|p^BPv7xVIdxuIaTqE&#fOnMR4tcBsNk@$kZd5se^7i%p zV%g*F@}to19dUgvB0V2M6d}en8$J{j(-Z#e1RQgZe z6vy@n6E&=J$@4jXRL}xn5$RYiT3PR3ExtNGWD>sE}^qX%!J9D-08X1?3>0ge!Qgoi%*;p zvz;fGcf&k^;KE!1-nZkSrw90D0gCfcU0n)dOdffQ@OCu4)0gM|(BUiL-@lIzS28-z z+X!4#jl6ZlB@|zw)A4JDdCct3J=M6hxW^&XOpDKp27pytA+~%pGP*RrMcUnzzIpo< z)$Q6~*&N#1XiK8{@|76QfrzLh8ux?^h^IDCIJ0x8^8r?UYUpeDBTPzl=cvRQtxL3V z!{y$5#DjTwO=$hIacB z`PbEOroGv4)%3|NAI{Q_@SA!l6Y%0(Q}PZjA=1l=s=olv19Z%dbv%O^o40x~Y9N!G z$DoB^VR-o2bvI7uh74t*eY(dBJSC{?;b=;-p1+zZ^>ouK!(l#}3`p2>zZn@55(Fy!I*0A9I zM@>npX~Ol>?l)~d6LzfbIb=vVQjDDOtq0 zU?ky1L8ROLUEa7{k4x-oFRnx10=JSLkWXO~F09vLA}R}rW9r5qj!KJt#rM~u^G=kA zk(&6!f@0b7qUou;)JvmTl->R&@#p=D1(x%{=os!<-09CX&I~K*IAQL0Vv7S_Ev#T| zJ3j(t$FpJN?FMbQ&27zi)fak9zpM1AMwv5eLxcHNGajDtPLxWQnzu7XsCf!mNmHb? zTA42^OA;3~(>pTUUXuiF_Z3X3Tl*P=i`3mLrb4bjL{roqLCX8@s@{R}O0`zxK~#ZW zC*65@;9&~fi;5D5Jc@xJPF%}d3?I4;3xgpjHsnT7a#th%j0>@Q9x(0s0DXNBA8zNZ zKkZKYrB5~EH({=hXMG}M&F(Bu$Tfgr8gp0Ok?a*h@d@z041hHG+}kTd*XqWu*zTnq zb6FKqvBKYv z+3bOIxq<+Dgy?X8LQ}vpC(c6GWYfXdQcV$@rYs(36wGH*zv7n>;2cY@+zE2id_8BKw-5Gq?U>=RxV5@R~xY>(FY znM|DXzKbS6-j{G!M!wnCV}LSCKqn<;AM(5lzbW9#!^_>eXLz@301y>_>@LP{v{%+7 zs6=kce7OCiX|ru2YF(bg7kQH)UBdunXikpd%zW{+=qA0ZBZWA!KwuB)G@;DtcnE~A zaOlPQ*ttpxq0sEB+~x$&X+{w6c88C~4$}#O^8Z5-uFxzXB`z2MiQO~gqGz;^9VRCb zjhsBS{$V2yID`LfC;p#oFDq~ujK%^lAMO9A3N3FkIW2^_1tPedB2A%sMdKiUh-C|S zXxxtt+3v1A0#c&?wZr{an)Lt2Z@3ch4;&YXUD!U}o9bffIK-^ z^RzW!9}N_biwOdi0$rfL^Wc)_`vx)uhPdRA|E1(x$Xy-yDe%Aknackso9yqj{(t|! zO;Ic#TP}xv8)EPCFkt#H{W&z*X`^7i{FaMr)c!R&;dv*j9ZEWN*1Va4J+$cJEknFvEI++t5x`zQo5pVT+xFx~ zQnCh`k<6k=P<|`pP&_6Z6!~C88qj$NWkBCrJCQ$t^MkXq50=gOGU=~6O`^XmmdxBn zc?hvyjDSm%CHs$>lm`al|3`P{8PwF;zWYQJ5UHVelnzEjL68=tiikl#A|OGfg9PcF z0Ma4!BB6wUbTV zpU;JfPV(g*+WhpKtC#z|bwSz*fr$aQH&&@RLM}yAL(!3?)bir`PS+#e)(>l28_CZy zr(zT*;W-*9A4byCwQAUTZUWz1(QgPq-$VgkRFLEi-E~G%glwn#@~1<1H&pE=+<{bToseL;y}-|?%uo*cR) z*P=2|!O0AzaVqk!CiG`iYtYx#E3kZ!)vM7hJE>HGPTx#*Z3kBAw$}8z&lC5#@(>!FFQT+iiJ!h3Gxm%I0Nh%Y zv6gCjW%$#=W{ebsw!KfkWc-O&q6U3{%DB~V;yo4~WE^AW_RjzGrV0PsW|rSr<1 z)mv?zRFErQ`(HLqr!39nL7e-bygP%_DxYIo5k@8Yz&N+j5SU)L=#cD^lId<$b?}na zqna`L_^e$zB-x=nfpeO+Uun#qt9d=U-2XAZi5XqtgqGsopv(m;8yCO#wnFCsw=$3f z1MEXooN8smS^9Q(Xd%W$BnoG&>zm)T2^y>psK?rtETs&!citN?aYq17xty>cWzFDz zAr6#6eLlVngYMB6qP$m^xtHvhy?!pJ%x*|%rrgH1evc!8N#>h$6j zC?UssE!E+-O`(8B@ZZnU?1&PLCWzk?rykJPc5ENL-9{}4;D5rKF@0*#%sOQ};}RW~ z)K9f{DK^gg_*2G}-VQ%m35SP+D7}xv-Ew>Qu`j>m5_PZ4Qw3Omv0}wiO|Ct7{sfs# z`PF|V+^y-AA>ml@zS*O;k=DuFjzrh~+$U0L;%hHp3GDKuK5q0H}9>r;EBIKDiZ$u^nPAQ1#`U zly@DK>kgUOlIXYWXf8Zg8gN#DB7Jb{~5KLv^h;QjMua4mjqz%Pg>-E)>wP~s+S7;&opps z9H zLCwsNgzVtX64wF&{KGj10GuV$2;zFmw%0C=$2k*<MNiq(8`k%*Z4R73_C8sj9`z&Io{LVp4k_&15K?PA}a zc&fj>PDvTQ8}N(AC*7uKV44AZ1X?S=|A`+cD3Xe`qy2LCL$8#wJK7uU_0{(#6lQ00 zkA)^Bl0xb53Lv-lxKfYns4qsZh&D|6YbAd7%XF=kg@Lz;-&LKL%W>^L#sbiMvaOW1 zK5^LKWd|Ai=eG;9^T;yoPT!PSsDM!^jwD9zMrzsNqLR$I;awf@o(d|UsxWNE4fVo8jmUXIE&STZDUt7;1MZWWiUY`9Y- zHwgh1o*&$L8a%&ySQngq3LbQh{)7~r*~B^PRlT;i@bz>Re7dJah_(d~3+4oqB8hAY z(5z(9t7@+{v8T;^qEjVVl0QhCi5Oj0>5*OWE-xh7=FP>(?dN-%D|pkG9mo-h(H6kN zp7ZzPbyI^gY{Y2AKcLb3_(t?99RNG7_ju|`e3(Wy&z^s9H}PdfYDN(Vkv`YOn3kk$ z5U_CQA5cZ8F-T#_e|n@$=Wa=dumk2m{@CW znPc$d{I)aIU?BEzu0GO4d4(%MDx$n zj8mbCM%$34igs%pVZ1s#HKFhUNO@ao4b}F(hL~%H>i7eFG1%rG5CH=l(374y&~;Ol zEhrWs8c7kJK(qrKbzmYp-zWy2K9va*^gke}{?9KpKlzp9^)#t}I~3?3Vq{`DD|F1n zasCQ2^$)`(aMnTa6g2l{kawDOg@KG6>uoA)qe-Z)0uzR|Oh^;w8k!GlzQ$iybppvR z&ZjM*JR3A-cxP8W7N;#A*L)D+ou*#!ef6$;^!2qU<529NBYIFm2EX}i@X9#HPEIwO zP#mO4vsdC9el9T*LE-JYf(Nec)+A9#L{P5sG*d9pXhPJ;MA1F@bJhhODnEPNJ6hr- z6Fl4!q4NINV9tcbQ{xrFEi>g{Ed5GD`0TN_3aR2+GQDB9ED2cPo`)K_GaNJke27Zl`0umDzmD2qhpaEz&>*#1*sa~x z7Lq7U!1K}9S|Z1^pG7a@VP{V~jQ<;@3PYT3*)Wnb%Id!mmVQcJjMLxy8BMdwmZna0 z6#2Z3J3`DGdC$BW@b|k5YeFZroMy;5eDo>53!S=?PwC4^0!@HxX+e>9j`Uko$)|%Z zT7~at!lt@l67*Zodc&t^=stV@_pZJo!ovQML(<>HGOqF`Jb2@<*3-N%Sct0j<@*ED zRvm%`njX~k5YZX*pqI34Qp@yT1!I#)MT@*gLOdnq;g&3tl&V|xb2_K1Lh(~G4vQ9Q z!A%O|(B>wIsP$i)PtP$XX6Fg~LtOqiAQvyRu*$yo??*c75C=~lND5>nQPS%22GSb4?ru9Phw~V4 zyXksu>~_GW#`VtL@jF{w?HmU&F@U5YU?Budl7S;*KTV zEr9^qc9|J$|Cb;mUV-U{QwCD6eb_NUH^`qidtH5F*nQAFj!whk2{8kcObm32`#uCcvla9 zCU7wW{MI){LdsE+$dS(b+zvS+T`C{X6=dUw@#;0+RWgW}7C8R2b!m=ZK&H2lp*vUGG)Vl=2cv`Lp8(kJ^OD z>idFQysiOJgfX^lykHJT!-Z90VIKAgmaKlP6D@bx-jz|KT1=>OK2^^`i2#uF!ng>a z-AWf9qt@jTW#Dj;5vKEITdIyryyko6nW0Hq%?&%gny5Gb>_6VYsX(7*)=pB-27v5! zR|9uY9@Ivfj zoZ*KAQ!c4W4yZts_C+v5KpG|1>G(yn1;PT~;uCN$gLuYK53G>me_d8IyVQ%~B#M;# zizJTPyTYEkG^UijC@2@BstDxnfz=+HNy*8$N%X7b7|ZBfe_MW-j__OIO0h4E+j4sX z&-jYJhQH2pM5e{QDdpA)LzB!%Imc%mWA2+ms&4)P1p}oen zSdRF~^TRRfaIRs((Z=VehOZxG@n&3F3D!GUhcz8{(vo_A*`Ht58h%|%u>Qnv<1*)2 z8HT*nNs-7~aM98|H1%Mi|8#mv0zif;$K~J5Eldq3d6|x`I$me0+^R(;)Om-all0hV z0hS#t8Q!$Y{MyqiZ=Y`b4xdY=2h9M{9oo@kXcWDh2 zQ^(!H43VimZPDaY%|_5gJ+~>-+r_(*Ef&tN)6%XYh0CPMlOKPG!d$kQ!Kyo8o7WMS z7RQ@aij+~B;>=zZ?b%ooT*#~Y;*9MMB0ofF>n`cTtMuGnx_3M6D)5dFGwL-^q{p|` zDU!8f$NiCZCh6}(R|mu7!`GmZu0(AMHBajNSGui~&mQCHNaS-eX-qZ``^CSL1{u0gWUQN{JZIlbD)=Cqni1zBu^TZb}5}73s~6 zZ7`H^_#m3PXYJ-nN6M2o3w=D7IK$b<0b?pX0C`OXLwB#H^*IR6#)IFIR83dqmQIhW z->3aT=$-i|YfxbMOP2xp@86WJ5T{yyqse9QHKy`ir}P6fD^hnTSBc)soN=%53TK%3 z#%l`K5SrIJ{86iwY1O=;g3|XXE`@sCFlOAyWGONa+(B@HEYqCr7}L}A*3NmvsAXNC+?XlIR`!xbFaKMW@xT24h%n8ATVg+{C?DR`{SJ1;NjKbmWJnh z-YNt}Riy_5I*mOTku8PC8B7gxpL%*f15Bz@enD!Hk5*v9(n^WnDTOJ|Zl5rUH)=4! z44v539Ix=_0|uuy2b##-P)9@D+C5%tJK~5pW7oSE>Qgf<|IU@BJusgXe=wr%C_8g+ zFze(KC4beCox4T*<>U6CAL?+S^+JZCFE?|>{Bg4UX8+$vW-Yd@SF{~sVB7WLapSDm z%q!*>$A8b|d~+|!3wg-_pa`E?Qkd(DF-NA_d*$PLGvI03_|SY$+O~9|P4Snh!AQu>Hire0GvO_%MhZJV zECrja!!i=ypK5(kK3K@Mu%o*P2TpZViky1~SXOV6fNqc3o?$e9zeoL3wW8-2Ce;cS z%Kw16n~HyCa&HvQGpb~%6_?Gm0qT}MeM4i8FAt0ltr-q)OKEoCxO`gxXzy!$I4LyE zk)t|FR}6$ntRJc*UT7A*=0jD^BK#UI_?@JwK5FT~6w#-rFoRQmo%U5pU#!|HGbf$v zUdFL<2OwILiGdw)23NdAbbRgRKWO^$Edu~l@)8g+>S%};UgNRx`S8%lcb|lmVu2iPzcCbJ zlA&bbJAiK$Kq#wY@|$ndYrB4>vbBUQ_p7$ ziazIj3iu+R47&se_+-Ub<2ArK0&5X`0kunhHCE{G0QLjUUSk9h}52noy*l1 z_l?7$YiUMpRF~{gUa_YraG<=@xJ8ZEbi>vbUDBGR^UHoL);4^WTr3Ew+ZMW?y<>}0 zrbs&O4q?My{}=<8Y=k_OHR#>G$D4jALi}k8^j(9RUL!4{LVqDx0;j}s9l3zjz9uxO zU&}2a5;|D$LfV{jpx-r-6CS<_kTdy$wrKb&!19je^4eY3LKmRUeG5y=o>R{sWR6jf zL|`3hr2~lhPZg`jb$jqjaA|(Fk`5Jf6A^MA4T(@vg-!6BZ+jSTAMb$U^Z*B8(ug5 vQOU0TtCIF_>e~Ou_kd;)V^Cl;4{*-E!)TdAXcHv60)YHMM}83c&zJuJb|osk literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-6.jpg b/public/images/blog/blog-6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09d93b2f7e6cb4bba82025852887d415de9b7d33 GIT binary patch literal 112805 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-6_hu_49f98f56b956af12.webp b/public/images/blog/blog-6_hu_49f98f56b956af12.webp new file mode 100644 index 0000000000000000000000000000000000000000..69a07f25f6cd0e6e36dfb6b5843a51b9575974a5 GIT binary patch literal 27916 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

^H3_%=OXUhLfpvP_P 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

!AL1^mE+tW$`2E`Tqdp*3kDc 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-6_hu_738eea9b9eff29e3.webp b/public/images/blog/blog-6_hu_738eea9b9eff29e3.webp new file mode 100644 index 0000000000000000000000000000000000000000..fe6a6dd0f05682ea1292dc9ba20c6823b10271e3 GIT binary patch literal 23210 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-6_hu_a7e61da859c97057.webp b/public/images/blog/blog-6_hu_a7e61da859c97057.webp new file mode 100644 index 0000000000000000000000000000000000000000..49f09bf4285185a90e6733db39cfee8f80362038 GIT binary patch literal 46124 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�=8zI5>4SnO+~_+&fp8l1b9SET$88o+kAd_)jVc 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 IhDQJZ0NS+H%>V!Z literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-6_hu_b448f44c73a1e092.webp b/public/images/blog/blog-6_hu_b448f44c73a1e092.webp new file mode 100644 index 0000000000000000000000000000000000000000..ef0bdfa620b49b9f3ed2408ff265ff3d9c6bceed GIT binary patch literal 17956 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-6_hu_c559f46af58d7b01.jpg b/public/images/blog/blog-6_hu_c559f46af58d7b01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c2e01acb03396d09af3b42a4c64acdb6a2d2da3 GIT binary patch literal 36516 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 z zh0p-U1X1sRl+~x370w}i@dn=O44$lEjMG&cwr1Y&jAtM6dB%w3*FRdNd$2LbSjHwl zHP7(`u2EB80g9K>t&Rfsa6oKu)wcORzLIXFG-)!?;@w zzBt|M%KQ+X#nlCEp}z5&5stQI^@(w~kB13T&TBI+jT4=bYu5$f$z!FCtaWLk8SW8U zjB(@3g>=|uv1)<5BnAov(>;ZSUCoC)Q5L_^OA4T8taM@#&y*~(75fpZrjh9dn|gQp zXl`h*tAwZ7pS-dg?m>AUVc_nmQkUPjm3VxB*3`3#S+x8wG`|ViIZ&5Se|H(*Us(Do zw~RqOvZesRM0iNJ`uD1YvF!TqLG}PU4!HhmC1Ju+3!os2-nl%0f@3K-ayB{8n@9Ai zgk*n==LT$@|5icLkxCsMN`{CD3NBwnp}*y^a*lh#lj72@W`|9SPj1;c@8GS-v8Bv? z*-o935)|(c3PgW*&jWQMv@N3vCjb7YjLD0jBEumYw{VBAm2V8Fj^k@x@1!SGk9pT7Kgkq@&J4+o zpu&ESoCA{a%*c>zTYIEOS4I~v}GsjC?mttzWIPrR6(xjVK)k>M=mJ0@*)aT zQ|P&iYLj?L=X$L?5%jgx|Cav@XVReCr3I(9i=w29IHwD%3AZ;xd5UxTdK>%cs1L1Y zklr6={#xtm4fe7|RTI!I-`^y2Dn~%U=OQTy~ep;<%^lUM-i@(GJDtxnfT*SlKh~VDawaUZcQ==Tf8>n$9W-e?8=4x0tl{{a0 z0dDY27tkQKk+cvd|^ENWZvWL!?pt$G^j37`giYYN(_z^#D$WfG9b2W1G3PM~(xll$tvi z6X^FKSu{XS5_$=9p%&oY|E#{7l+u=yxgpwNaR2}T!Gjw;9AK=x&Ucmf$M67QF z7pm}Z#$j<-<(CP^Wy-_ZWMCZX7(PC9($znE^ z?H(cH_NFYKA;6zIf8yQ#`GTaeg;F?kQ?TRD8mW)1XA@YLgwA*DvyB#$pOqCIlTWt) z{FE`Jm=){;9pm9765;t)f^OU3LodW4*3xSGqNEtY-sIFa#80k@?yuWyh6ex>uOUWk zES&E|5nQta^M0r`ZcbCaA7#dO4@&EU5FQisrUizFn;uR~bpbvPJ7-@Hcfp7g&$%x| z5TZRPY=jKlZ`}w@U$#K@K%+Ms{m#%MzUlR+$|*19YxHDVNv40`DP8|p&hOdPNybgh z3S5<|D2XPc*y{>Its#!t;FG?z1HdVw_0r|&>+9AdYFiFyCuI}+HtxHgzGbb+ablRdBi)#yzMe2t44R zhx@feiEyF5#ptOw7O3!!1{^2QTHg9bn);VBq{f11F(V0W`z{I!8BmGPPX3klmR`Hx zH-0_s4}WbWN(_#!&HQxMn?Pr^M|t@YSA}qW`fhh|JZWY1^%F6F945MW^)%>V>A;yC zuIde{ zaw0F)&iSWESmd730Xph>?t0uyrp1Y+{<*a9g&Uqtv2IM zKh39g1duNzd$;yYB{{Jhj5?~gZWvZuOoQN3`eG@Vb83wr!#=nOtZgeBPA%wa*{q5h zy2(q?7i56PsZ~ktL4A%p&DB`YkN~6&S6<;Y6mcT3ofSgxJ}ZO+^gno@$thNwe}IIq z>k3y1x^}fk2U%#_%AhOfySX)W=TO%sBdCq+sf>K|Xwce~ zth*+hbcD|mCc+SLZXq|mHCi6CITN@NX9*}B2{Q9}Vgu@fWOReP(j0VT`ZEX5uLFh( z$PVv_UGGR|`R#;5ikb)n{PfAL`w`;8#jeTCo^D+lwqJw?pVI;_Kzc3q>=QAHABZrO z+In14Tb=2;M`+mmkwTnfcwl9cm6uGJ(Z69O!RQzKa3pT?J~M|HI)5l zt+w%7vIQ7!m~W<>z82gQPIL!gEBJTgVAu}=?k)ar9UL-Vhp!vn*$wr<6NjO6yVx&vv8s*PM8Sl0pL)b-`I#O-)q5%Gh< zaqr)UEqSpW(g52U;vHenb~EZt)9B!sWt0CEFwxejhlhm%$5>-Hvni;3+h&{{d(o!G z>3@p_%zk>QbOnR10Dcu$H?2SnwkU?K-h->A=`&NJSFNgb1>hUOztc0R)0*?>G1*{B z;M(iP0mGp%U+o}ky53chl7fG%0e1zWe`kziUZF|jebU&?gkPAfjx1MOARxf8OP2_D zhgn;aOe(0ApSmx^ZR{_hyx7m_x{aG&9a|MI%w?4|;*vLfk(C_JE(wPIgnsotr$c;W z2#{U#$bM?Go4#se-=sCGd>GBC&um2^^B*EXxHDSN&fU(X^jJVXN1!T&NKV@Dh9KMC z^{tzOZU4+O^7;m5wn^!Ecm+Jz4`R=)JLV`@eC_ab?A_OS7fSjt!uN6vBkNpIIu}uM zC#WWxOPjPO)!qY^+LO!1Q+x%zvs$odxyztq0)R-ZPn#`|U+B8d7|XcYbIVA)24n{| zQxl!RB%OPQvAuFQb3|tVnN-hm0S`({);UXkxu(<_crbFIOw|XG0`>sLdl_5LNcoTn^KrpR zVBwT}*F$d4wK$=Mk#a%-vg?Whx#BQ6~>6^B8q{RP)ALUw5FP-t}aFYM1a7tFo{~DJS=H#r%wD^6O?yC0kV^57{%TZMn6@ zFL{C0iaEYH9=olk(o8sMR2uS$F|QcozAXpra@UyBJE}RlLAXBj{f=pob_-vKY?PQH z9Hh!Dj#g~h@xdE5U9>3^@8p99;K7AR>!B@U@3ycu!)jQN1RE&plf0c)35pT87v0)! z4tOKU@U=qTV)uC7ub^f3bR_O~9^HYHr-B7ZCC^Flq`bk05J{)Fdk}N1dWp*;!(<&6 zBmKrW{+%eA8*tk=*5xc$`f7aw_=p0$ntxiXVf4X+oH_u1fNAfW^&#;|#horV^rbH9Va5i5fMIJoUFTD@ z8=uyKj6Z7C8phCa#PC4vmxDv5F9IgIxR75Wh37jlz9zf!5f+Ot(=X)E&&Vtk?m@4r zo5ocwph%{R3No3(;;+BF05i~ioC z3BY=_IO$JI>w;lbmK4DrcBnkvo<7EmsZ%8z3{5;6h%&%wzRmXH`@3q3x0`Zim6wx1 zWhJ;ukHc~byow2>b?%^r-MC8mcIN3yjm*E%4___hs9pr^3UKAs=MLnWQnGSwzwpde z(a?fWsb=1T5E{bq=|A%G0cUTZ($#cyIfAkl!co1Gz>Z6~k>QsoESX(-AbMU>%w1UG znAKPtot?x+5Rs2Tta}G7#uxj*+!#D>dx<{KSkE40(&fdsOK2h6nsX1bR;H~`xCobA z@fooHC;~f^3=<=s9_D;%wQqiUau51wV|P(uucKPLj zd0b7D*RF9A2_L!}&~af8d9qf~1Osqy&R(1rz&&}OE#Q5de*`K1p2Y62^H;v%{38^z zl5&b4;ls%hpDpzN!=Br@w=gyLgSl&dZ_W>JmgwEUE#N*V1%$W5xbQ%=3 z4$QhNJJrJL-|%Wn(oaWxTU*2+TW!AR~G*A$k z6FjTO55t;%rjqo2AX@OX3jo2#EdLUTqjU?srpW~7oTVS7!!!vGja9VA&#WNrqzl~Y zjicpR&DF7%1)c}kf4`PP9tf;ErYg5GU z_6FO98jtOll?2vim(A&#)swHq+B5E>R#1Ip&2jxgnZ&>X7|^-0B6{5!HYE zRP23Co13_vSUBB6_I|VoLs&5<&=3Xip$VJPv#Q-;!yMUcPtRyEdB7*Rau0Hllb&}r zN-or4@W6FX!}UzDCL-bc#3%PG)w-iYV#B8 zY{Jv_)oS~K;is7sC71z)^3fZidh^fkDgnD54La{MynHiKmmQ$ZytmP+3P5j4tKzoL zvx2$nXSUSU7O$Hb4ttbaevqr*1s_Ppef72n4E*>@{u)i$ZaPXA>|HJ*oB4hcw_KNl z>b!YdgU^#5_H}wgYA%%SX5Rjym<4N#O>?xK$uh=}>xn(JWZ6Rr=~!aP>>?CXqejl- z_Dq4IF{QNZv!G$Bzh=+se;#M=2_<&4*CiIIs{i$8D6%r?$$WN5{98Wu>M~vWerR8?Bxo3BJi^TI*ORk~O(7g|K?!c>7=BT3#L+vDn{iY?;b6_X z-hkT+ga9emTB@|eXr(Vvp3KV_ge-aES$QD&p0kwHk}T$RhlSw>OVpY2Zvhk~2+3K| zQnK85azHIb3;dq}@o%>gzTe-&sbe{c8(#Tjlr8GI;)ula7CrwBY0MY_%*pfV?#B8U z2#LIrL;U34SKTp}kA$1~rzIA~p#dmk(wwC0=WfH2HIzz8KFqF;$%SDrULmek3q?;zq)IPS?Alv(_6T z*iO71Uw%~o z--VtxETlVHHbDB=p#P_FceC$|+BqN%rcVu$UL7Nvylkfa6vF8J+Qn(j(tP5f3+(xs z7earGq*-eY@wR{cR~zDiQgqR`3sjAek900;vW$n>zHkC8-d}UvE89!p^6qxhxCZdz zC;Z_DzBLmoIQd+WhFp(lIq>?(T8rxi*7BlH9IAhHRM@MbUjHosxdH{9h)$W?ya zdh{^6xz?eIaa&gV(=yP}ioh;4CE6KQaGEQLtcO8*8?w!ZE{jtg z>+eC(Q`V7#<;f?HWhPj(qMu#Ry>A*D)9NOdIQz<-KhsjWP`7p&YW?IW(#D;z}6Xx}g_3Z3M zZFN0K3J{M8o4MdMK#)P2Oq7$?8k&%Bhfa-SLKUO;Jtw#w;LHAi*Cbg??HQ^Zs|UzV zSrGmmw&c;y7RMR1OPt<|x@XF*&@J?$J}&+hgM>!@LL4F2z@E%A+3^Fx)R)}N0N6_e zQt4p%=KxB;<`f(Hc0nu|ZtzXjVB1HuV6KJ4=B63EhX|aHfeDYEkq|om7LUw*-qqyL z5JG3DpdmPrCEMX*7F+xZ{vFb7Mu1Nfx|j*w9fY?(wY!1!BoruHyJx-)TV7r#o(`BN z?h|@VLP%#{QpwykE4Fj^r`+=MEI;CJwLLfgW!k07(TRl>ruMz4U3T2W|eibU%i=)wg?D#EacIK4#-u4NzlkjGb3H1vt^jVp8xcb%DBR4;P zJ7|mlpLLk$UEMwCg9ysdb~Zcu!^2tYXG{a>7eQF(n#wiEi*#2+KG2P=ikJ<6Ez)1eM8F1p1v!O4U7?b7kQYEb&Y;CEIwzNzDN`+9LHq& z)d4)Hs+RL{DS8$z_TvY8gGRRwzA_)`D<1@YSOU)0A~>Ey-1g1cy9mfR#1O!rpyFux z`2%lN64>+<;`vdd>wIACzv+pGJc6j2dyr7(2bRU;vZ_y&wjXxGB-hgep~qtg-7MS0 zp8aBX)>*0Tr=(`qvoaXIGH*+Ecw=Fr$iY!$5@MzYFidYA`C;aV#VtPlrAf}?*nj@$ z9`s}b{1P-&ah@?N02povm!X5t-f>i=lL9a4%ir~Gs$OP0+CMj`whkR)k+`_ENCetM zdY}CcRJ+W;?;-ZuK4To$y89;PA}HebSif5j`ddq%@t4?*6vmTSZqm_(6E-F5Kg)d*{at;A;?ICQ03cx`(l1)PXg7bdkH_;Es@+ z%(#UhD<9}x7F%#py5L~>bF=;bj69YFw3`r3`q-Ax@pjf_?Vi0FdndrSVgmP}}C_wz}{z%N@xw;aq{l0`9?(%t4|2`&< zZ}R=^V$hhZ+Gr{~>vYJQd1mIxJgyB9zVH>hplR0Sl;CMJTw0o&4et-V(0HG=03Rg# zFz7bR+GWt~znySU%)v6Pf@F4`6#h#cPZ8>#A%7l)dY-2W@YQ+X*Xae_H4l#G-{u$H zI?py9IS0tDlv2&?whAhEIPsKrRT%vp??3U3ah=E@nA6@|g2LLZ%$JU958?G?F|SBj zI;lN-75G)*SzseALYN*4JISM`rH2VALko&;4FHIeh*? z^_B<7FwR!OXgJSqXG$H1dnKNzk6#FSMdawjG1jjG@sM!jTgvkVq4Q=It)@_PwJ)+D zi%~1^f+H#jVbqS$J%eaCFsmzlf6&mb&+Mo3N+#vr)=$=oU#hlhU-li!&VGR|_Rjp6T-rdH_~i@PJG0hyX}0at zR#w2QBnoN$xwDR0i0$I}5f>a3zs>3Pz3oiT0tj3GU%z!YFy+tQ=mhDs| z-E5*8BKO2G3&{4aA#+6-ZbHB=whH27X+uZ8_n_ZBWkDSt!;dAS3q_2@ZgGtOl1e2v zALUDkHJvncOb~yglFwSr7b8i}se3R$wV~%tte+jwO_M3pA9lWNIPt`K%xSB-NjbJ- zgVH;4N87%r^&SM|00Lv~d}bq(it&d^qR!+lnGe!C8clpT48G`bw0c-q`mG_^I;eUD zWP)>U;5aCYBT__0ev#yZVe79+sEfx%2YH=RZWk=$tv~#?5|yfy1633SXST?oK2>Yi7QxnJ}4|6Rs{B?7a=| zuU~1u2FS6DRm5xjdk{~lr(~Xh=iOJN40@|J0%cK> z{ieQ-1W#Ue1AI2}tatS}?mN>RYQd3nZ)=jsOT!JPaUKO%?(`}2dj z_qQ=w@xZHZY%Wl$mivo2Ms?)gpZ_m(Y1z4K8mwpY>HFjBCIklp#8?Y;Z%kxS;UpHXF2xn zAe%+Wv4>pp`*jp5$B)b*jj<5RhbJu?JQNY40PMUrqqqKJ`$(f^aDSDI%ROlKWv5{1 zqQoX=&}~j+TS(>Y7(<)h!Rr=+UoKe8$Qg>G!ME+q-Q;hT$EIU}aLdx?6pJI4$SyDK z&Pwe`YhIG9UY3t8NAz#Lc^9@p<1j}&{(67{k8ZVEs&KHOTs4zz=a14CU;2)pK&pYQ zO*Z3m8|+T3Vx>0f9(34aUeH3!7+Fh5Gz9c+3x2c_-mvnBp9P@t^lzhsY9 z8~ML+@swWR0M;Mc-$UmeZ&?ZZX^G?8`UDK8keA^BAfH=nHdv-BQ1ITKTq!8H` zjJK}Bv+$KajK7PsXgQCO{K~u1QNL{a&W(4mV?lQn=!>9eCYUQ4VrV98|JIQ*3p)1; zD?oj#GT(#B)$C_2cEkeas!J-P=s6SqDG26oQowjK9rb4K{Apu;y2U0yonU*BcKP{P9bALuQ_ z&;$L1r>8I*RO-~+j@}dD7<>m$3yr{8{gPVz-q%0WX_sNrcLIbkiQBM{Vwq=3+Q})M3$^DK|>8&0k|?xJ)y>MWFX!}NSi^v1 z@F)BMl^M?;g;6^3RQ`O{U%z1H$puh->iK(6bY$l=RJb^|yZsQ-fGPxTyFqftNvJm{ zdy8_mZ=cH^h6qkG#L!7AW8FSIqhkE^E9@RbYQ3Pk$!AZElZG>@XB_j&tp9Iry4&eW zXP2fRfA}0rtG0!qlbN0&<$dWM;eurEY(=?4ZdFs#?5c2tO-gp*E@19am`^Co=6In9 zZ>G0>lyCuT@$?^gkeJ;6BV3MnDD0p&JHoG#?6-B&{83&ue(ri*{d%hKxkP9b^fP?~ zWc>7cg3ewgL2>-x$pQaQwjMcvQP2a$Q1EHH?vlxb4-&qd><&MM9*xI41dh9P3(TdR zNKK5P&@Y4P?Bjd5HlyLf35AA>hQh30ItitB2`g#+gtAu=*bYuHyKNRKKUHfC0hvIk zbyL`PS75-GaL70`VRH|XyYcOY6}+4!%cDeV|p zZ}R&1k*|DxmY^nZ6P!3?Sum|lzzvo#4CAF-xEa%PS%{O)eJskd7sikAY^;qIs?azo!!NJrvmJHO+ zO2UySk~4~<9&m0~f?|0GS}P#hs1($z5eFLiYTL1=YtI6T)}GcN(?3yf4^;qc8E30wT1%^vOU!D1>R zkG5OH4f+)|?$j1=7f}1lnHM{di$va~_b(%FY*HeJF#LpQO?SiuD~~q~TEG8nrU|@@ z7`saHIce^+E$DI0@cJO ze|HTI7hBvI{PtY^)YYur5Ze8i{@ET5^LB^-+S7Z`6#P{1B)FtBF*AaJhVE@Gga)|| z-3syPr(=uQ@8o`{6lAi7(l_GW3IJYPpmr^zGwgUWzF>ff5{X<2zPY?hp3He!SlwsJ zPc9t4V2CnkbKQLDI~5}tG#g#@SK%Ft+RxeYJk9Yp50VbpIj5h%cWcT`nxBni4U3Tm zCq7E6HoOHsgH*x_$+*EZu`v<5v2{Obo2(GL|5cX}#QtxAt7Ywf`}9W%jS$Wk>=}a~ zR?_`aUbzm8*r_LZj*~E--j`*6_F7FQcM~lSNbe_n{%rEkUe8H=S$e* z;$@P2kwK8}53Ie3Wlo0h{@ocX3?N+K4R1CTLyi1=IC6)+_6YL)1qIWhpsawTlvN>2q(-rfJyr(TwyY~_ z*fv`oux)9r^L%?5ZUgk|P8BeY2Od=^&|vDAWJE}jjR3{+SZvsO)O54C7T?usS5BY# z?!`Q${k+Wb$d=ilQlYT-ty>yfAVhYO&THgB>A(jM^@3H-{>!4L}U10)lkB)@l zZr7*j1;T=eb7DoWYwIf(`rQvVZ>xorIBO8sdk4Djh8tzUTea9QU9pSeGF0o4G6JB# zI9NeRGmYbCeFGid15OjM^ZDxg(X)-N?ZsZkXR~iJA8r)yCs7dO*AL&)$7Qb;bG&H? z1iD$uO|YBm5yI^n&pP4xoYW2{*A)>z^-&^2 zO=*(fg#w1Blvk{cRsL+fXfRI>*qr4@J^CmDmIL!nkxH&8EvdvJ>dWuIC!$f#qfO!V zDE1~iu?|;n`?}fNi6Hq6sG4v(VBaK0Q;Sm368&>4i2aqO29Qp@Sn!{u;BYw5oD|;m z%UB6&$h;(@;%-o~MjG|(7|SdQ4dM2}CV_VKBfQ0OG$=E?O?BXmsj_xZSeaeBq569u zzc6}4M1EA~v_IjRjs#C3TVio9Yukb~2cJ>?WtMp$cxv|{VG|wHMJ46J3ySFLE6bLJ z&e7BS7&S~zHlC_W%R##x2dkm`YE43e1*b+~-pS9!KRcW>Z0~;10jo*n*))A_GAXq8 z###z|vFvpduqP|GCOu)p0kwKgbt4c>DHvD3dW&5ml!%{y_rZv3-Vm%eZ%No0eWk-H zRG6~zi=AS))d>~%c5(~(?n4Z(^PLhB4mALfO0n98@R>|Pk z9@|CB@N1oVD`~5!OppsQO<8@l2fq4r!JOW8qxmspa=nmc=hD6%QDYr&u6g%kC%Dkw zm9=IlS?MEoEFId0>Cxd;2*cM@t1)XdD?9_*dl3A#@yux}Lb7 zHmc3E`73eUgF8LN4-4zGkbFM&Y0`d6{h@?ZRh!ePvYMK)WhDc&IfO4-brV$ zPe*>c2c2(&&jD{);6TT!YCP*6WYC~MnDaFZ4A45vJT`7+o7nE~)zhVQXCxsiK#5kJ z^>@4(P@@+MY$(&h@4&&Ln&(3Lab<$};XUk?7ExZ;mZ#UxQD0t&m%>Y*-;TVU8vM#u z_lNf#%d?kWXHXF&x*yhLY453o?OUJP)SqLPa(C6=e7Aw3W`VjsFQT9zh%_(ij`zWc zqCfbK1=a4|v>S?%*g3mWn7wMMa=h+&aTDD;A%hw13oYk8xeZloOwQnvW`9H zIr?E2e8y?_=Xq$!Yyqc-1C`Q;uQbrD*vOWkow?~quQ3w2_gVVbO7?427PB;;Mo>Yb zH_yDZs`#SWpBHI8!{$w(;_s7O??n9Z{eU{ka1BXuKmyG=>DX>o{hzfle|F{BKw`Ac zeUhK)m(K@v^4<$szXf6*5B^_a`rifV2#`rHzkc#O{Tu-RTL$%MSQO25Z`LyO>}$y6tg)lfZ{ufw-zC7nJ* zw7wH6VRDzrl5M&Tm2JOvObL99uMn#a_T3awp59uGqi6QE1|lRAcXd&m%-$92TU0&o zF(qrzF0>X&kIpVSW*r_WdcWsmwioG->?B);(?YF_xd&t>B+#rbyjPfVntU9B*L6gm zCf?>)v$*wmN7$kI;iR?uaMR|at>D9raniZk!J4tuQAUmDoQ^p}3#Vb;Q{#XXcU=i; zQ^oUC?BEniR`RviGsBCS@1f`TBdRxi9O;51xxhW@=)=8o+aQsgN~n}XJVHMzfVC2G zb-U)#GxXT>YD}%-2vrEnvlV_^+oEK*Df}&y>(6gdQHEt}(3_^i8Q0a;U>KYNjPDt# zmaOi-NySnhzkC=YO61sckgIsGyoG_MhFRYW|46McTz0;MVL&53@Je9NocOmZ!$t`D zr5;`i0RjI<`}I)!4~|c>>pxNJ=a>Zt3+Tmu1RW+Jm8}SJ_%P_PA&6yFbR!#j{3`@& z?^jmOnnA9M<+AD5>0%UmSLhP7;5Id^dLLF~a!oRw@FLJ6QLjD7WeOC2#7NYczVfD} z+3U0(G5MottV5D?#7x~G(`M4S40FYv8Y#-u0KKvSsQ(#hGhpXX!8?9RUFEL%D)rLy zjte~sZQQJWR#6kYWvTw)B`E(>56+q>+eb-M!%_K{a}lX@>5+ph2u{t{-eqSK$g%E) z>oCk$z`GT*P4I_-;FI|Nu69xMgJmG9O59s;Xu@;Ly*s;K-whG&Rf*X+yZyL&LdMd= zJl*R}5P(O4b#!Rz7LhWH)eEjF|8&MnVsaI~)Ga1RQEpT5+3<^Kc)dL3drv6GT`__e z&(lNUs3#Gbo}njgVcqg;;}tedgusUz+$;7~_v*qc*VW!I&6nd&g6F=9W*xKck?$8( z2nZ!A?-0A?GrF2TCw`JAr)r#Ro-8l@{^`(_C)@VuQ;cf}=xm9^hT8P2Tm4w=97p*( z{ebUQ7=;Y$^xRuZvzjYIpM8Xm`i-TfhM(+}Kb+@a`)c@JLq(3Q`EVAl{$mtHYP?`u z??ImM2nHf)XAJ+y+t(*r9xP-^hPe5WSUVwKD?fG|3SNz!vQY(YJZ8vmr5xKqvl7|Y`%jLt#p|c%*kCIBKdilHR8wKJ zCLBd6QX(QMHAoW$q=Alwos30vA=|Vty@4XidReJBecL?du@!pxc z=EpZ{)|&7BUn@y!RX8Z&&^I~gZOs$UdH;xBEGC)rXbC8SzD8O!e zk$JqvkMdb{51Nuh zcT9@Jj7fcHy6DGtmcVZO(ADdIK@t21Cxwf0><+24ZQsT{K3;h)ySVi?otD)~rfy zWgHi*-}<=ftJHK^aiV=x2Eytyc$pKw17HDm@Lb+&I&ZRQ3(+pPR}K#RRlc^nPEfD5 zFhD*nf^hwr*mm~~woEhS54GED8D7;-%)X#Z%)`Lmp+yh65r=5Ehdwv#Wu9F6eDt$s zJmPL1;pz!>4YIOM5nIp|a9c>-=J3|cU(n0$(!?$$oTh5yaCS%R>v_Gn*$>S5KsU{E z$Xi~zca@2%;|_d>q+Ef0Vy$5HeV=jdxL$kb+s6{h=BC?S6=ZC~7q>Zgh8E8)?3$Fx zf~2(bzSaok?8fv9V-iZKbZB7#-2WKp@f&q(V(N% zD{eWiZ++rOr+*(zT{1diDhmT^=d66+s3HZA;S}$Okwk@HA?6BY{hYNrP&U^H#Ip17 zUy%I1^<&tm{jVO0c&ADnR%~q;N3b6I3(A?L3>+8%#R33|Bq=fE_##(s47+_NNhhIi zYhCBR4yRhH9b=-FWFO}&_KaNLI7kT;pisBK>`sL6saArnGm)Gp(&a9GK;)P5oMtpm|^2c)(ta#s>a))o30 zR#mpY(eYk+EZ*heh=d>}5qvqU{EG8DRMYW7?RG9g+g;H7gJ%Ffmx#YI^yH(ADwX%A zgEZ&gM;bEsEKdf-$xV|A9^fR8Em(7(%$;ar;3a~Udh-;tdixGK*L@ET+up*WWp;XR zMk(_>aC)BzrfLZ!-oes#{HqBxT7cv3slU*Wl!^FZY;bEh1}|Um7Iw0N#*U}^92&`g z+|D6P%$tv2K;et5%i|_3Da?Moun(9@68sd#|B;#~TjxHv{bQKB>#e^a68ANr>j)B> zVGYzSQ}&4HHcP%r>tA(^MC|BuylGT0Vfo3$y`xtSG-&r{O_vbvL+H^hLD*3a;dzGq zec)f0Qj?&*){g)^WxA7Wi&CqSk5dA-V@>7i=(e}c%PfMy#XK2N8cO>dV2E}w)M3*U z4sL^UqstWb2;2av&e=71iCnBmqn4}UoP!Jdb3n{x+ZK%kolYn3544vD- zv(#_zS0rynG^4uqr=rs<6^0@CJBYWrMU?g~>Dhxi_&{A8(YIp?@@@;Bzt5Y>-srU! zD-rOEDtm|mr|>xo-GQkka{PdK(Jod!^}6*!1^15f+7?YPQBQdxAPreJ8Z0^7xM?zl z7sD`UX{3Mu{^#w_|7>z1$woT^^8PKrRAB!;P(5U6v_MdRzA?7T`!C2Cklq zZT!0H>lbC?B}zo;$FRLP7>7whJDxs^9lCd9PJ)WG$AnrCr zsT-JZl>b=Cp{$G-5v!%0KCz|yjky%}^%}gx8Jz;ETP~Y%RH~~EGr6!_uCgjBy>zy3z`*u ztIQ1c0pY4pz`cl-umtXfCj`qPaA01boQG#^j$&7udz?{g=V|n-2dGOPLM_@b90?{D zm%xI|oB+>3h{_@m)NKG5e-`^mmQ8vb1v$CAJ6SXl4o2g`_ntxWQU9kzkaxcyiark^ z{35F|NNoeC>Z9`L~>z zh~Z_9fr}K`tYiMu+7>snv=tpuECg>p*eBa+KQj5bNPBz{@j5Ot~U)T>v$kE|Cj{d+zd&gLIxCY9yn|`aN z;ZMfV`pvjSh0HPWhWl5P0(9#Os(SnTC0ux+zeUj*Sj z9vbgYfnxy{^)DET!jV9wGXwys#n6z`40531@xR*q9}z?Hm2&_|aQW$Qy?xsv(2^z$ zWz2jfIV|4$D>o8OZ+)_Z9q6?m%+64ASgfe;BZfe}SkQoL+!A3Y!pHVCNWJskfIr0C z2mSZ)Oip+OSH0{=Th1K!s_~s>IcW9y8!27m4bHdDGH<5s8K-k{uW74@NY8EO7k*T?&%>j9trws0X7b*t|;< zyJ06nBO)b+u8)^04AXII5MJQp6EPz0%>GyhnHoSZJKSDXA3M4GaM`S~yJIB8j7GuU zYjW{PJ~Dqc-@xdVklQCWZKywtlp3oev)Je>fKEn>9*&>MraqX>Vi{2T5*&A_I<0VANLVvJ??B1O*5?@nJJadCB2QKpJY4>I zh=8AAM;T9v%^|VjKCq`lqv8sm5zr>EQ z4Q|xUBtfb>DZ(d0G!O&uZjGv^8|BH$cRhB+){5A+m(-W$$R>de*W{SujvjZUBfEG@ z4Kf+IXdKv?l;GVHItIy{+q%;G0g3rjYxFEf;nfQ!I-8ub~hn(cc_>aETN zA;83ysnz0TY3(Xb^*wXXQun77Wvu_$L748(FkXyZ7r4SCL$F~x`!wWOLK8h6ar)x7 zx2F4G{;9*-5Oy1WrD`bx5O6kH$LWXE`Eoi6Wsz?FQ9V^u)C*{~WX)``q67d~{}%OY zvKF;(AOnew&W}SfXAnvLT4(5#>M^uU{9j%$Octgy45@(OzYi(_ABwF3 zdT!xnB4XfKn{D6 zpn^{5C-WNIn)>@w4RT4ipFR-+N8w&>wNjJ;!mQ7A-OzKE3D~iy3Gq?ogLH#$>DKGs zTrPTP0Cpy${Gb3hXE67bduN~O~sz3OK}9zb>99nDT!9_vOF-#)t$j}rK_kgSurnm zB!tmxcsnfX^fJQWc)dKi`;{lGWmNJ%xz;~{Glu953{OHrYxbN;t4elt%C9o@r*AB{ zNHWt!43o`5Dor3{d{qeae?pW{)NdeBd_zX~0wnswoMn-Ge$R`h4Z?j{G>EexW!f&6 z?TqwhlCU@O#uGL7q{9iS*iDv>+BZ&z4Hq4pmMNftqC1ci43Hv@1_459kt^6#>tDre z!D-=hv#p|p$~9|QF6+>+U#Y4QATpChWn+GTPPPnv);{&r1W)yEEf$LT)Mk3SvkWd= zj9&_^SyT@E=?{(xQdIOE7moqO>%6pF|x_`WLmop2@kFC zlR37iyD6FW@mNGuD19)>f@9=4+5EC+*=N`a{|T5t2E5OItocI5gd$i$qiB||yGM^; zu6K$YS;jno`pS1LJ{UiT-k!5Xi9LRL&+-iaoAbylzcA01zyx1mUE3Z2B^o=NYxazp0y}5Zq0%b@9-L72BGl&6k;xCBu zPeZO)c(sa$y<(rVF_JO%<7YQNnj9&>m5aDt7De9CQIdON63U`yU@&o`oGsY<;WY@F z-YhN!goU6a|AM0b)xi6=mazBA(zk%N0T_70L@oena>{aILI?s1DS7%cKz6nVUcu*I zmHgk`h}D%9KyK+boSzbYC*QxyuSiIe4!!sFKS>0_`Dl^S?x1 z6vx!Nb5xMA*ZSGt;BMj?e{_d(T&2E!A86s|r~`Ki`yav)FvIL z>}NmDKPxh1t+N$DG>1e|@ksS{T#Vt{=u%4)J7GI0$M?5CUU+N7sC}>5Hoa zxfyu}OW|guA7Ef&?F(59Qiui{vLZrPL(22}W35{ni8<_owvHWB6*IP|O`v@KIh5*s zHrDT4)5f=Toaq3-lA=D#ZvO=B5xg@<^&4Z%XXCKJs6JynMH zdjU#h(e;3B!$=lWFqQSn2Ye@S7YB60O*U zeq+L888x)~mZf1WRX@zh(20!*MaU3oARvu1HcyV7eAig_X3{mNj6p``Enup7E^?uJ zuuzigKPd*1cKHkP1Yp=qh>4Bam+JV;_=p5C(9LC!{jPaWi2AFTeao@Z>FW>Ngts=d zWoTfHU69O!XMo1q!y@P*m!>thHg=Bt7Wi>iS_bwKfOX!98#<7^jU>4x-PGelIt0rk zFdgTQD?9xpy)JM7n>g#gf`_V)2N(nFKNNZ*7*4YcoyVUGHmIdcnM*|gcW zcA0P{hOY_$#CzO$>Q`ltFO#zd59);$TWLugVhCBy{b}A4#_&?ZZ;mPG8PCk7 zu&*n2`CMeb`=m--aPBoa{u#%96?~PX60s38{Z{{<{4R?L7c|gKUhGIzCbRVpfksOM zS!VY;bE-I9L%rAaO%)&A$qHWM_t4B@gbSVZu5ZL?(L;8rabu6VW7XD-ODy8(Mwp{4 zw?QDhZU?QWq|RqVPxwtvHh$CJ>UI|3?OTWIJDq=tLNyjsDNHo+X+kt)*C6@#poh4L zH^z&CBa8Z#aHKZkJ@)Cfd@=)k0WF9p(A2QaqMYLqF@5f) zybFGZ$I+JPpLPhmd+KTS;I_@YZyphrIXI=fJci00ug+aJ(XWqyjlIB(0m&A}NvYGZ z&EYp6w*%upCz2hHdM`S*&NJf_4XfT9U~eaxuF+e*Y4l~n`Q}G)1}Ve@WNcyIE#1*A zMXd7Ty#9hFC{&c-hhhV5ne=h#RtqwI{~C}@<-8KI5evQ1 zNtUwXK6JixW4mt2dwI$H{u)~K9KgwR;hhbIwC^VJ+^eRJB<)=Z&`zvqhO9LkwYd=R z4c}D5yH}ufo)`&y{R+sV}u3aeqjw4F>k_BB-P$n8rmUh?6}`sH)RPGHL| ziqmKOpL;zJhhhK@SK4Lx$GbGVy^3urt2(*j`l(DRf%6^&jT+Mx6KtmIy&X*RuQ{BI z^h>?gWhR4P>(TBK$IoH4IX|J2o%M|st=3TA%-O#n^j<*xpxe`i<<#n`6RzYW;;Ocw z3UMv61b>Fs{#amzVvHQj&bsxSLviV?v)sJvWx;QwYQmd2IBC?ZD^o~ormrD@Sq66M29*G+tc5b>=?=sSFWWXEXh zO)kQ_v!+JckV|{2kR5F_@a;GO;||C!ApJY)K`2j|By-}`U0CMr%7VHCiGyj3{TYXk zufKw@zyuyS2M|AU{PV;M@6T~l6EIdlHKDJfee1XVNAYW$qR{rGWuJiRL>>l(0TLU! zuj+VeB3T{qk~F951KcY@n`PLE3qX-`a&&Z&0h=nM^tfSB)!4@&rU9L3D?0~zP;|jD zoVA{xitU^hP+}h;TQSdpU>xk!+wd*GQAd4g7n(Sl06m|+W|^84(u;hYg$~H7+t_&~ zAh6d1xPd4os7Q5%8lEaisaZm{qOC^)RyHbI#J~NKr;!u0WX-~a*+F;8`KSTCDJ^^f zas)nvg>3AokYO#@XVCRAhzmk5)*7s`n&it0RrTP+K1G#aY_pNR7zC)Pnsge9#dLCgChym)!tQ!jJ z)U_yPk)+*r*gaw!qC{$dA{?h>@~~AUROmFw2Y#vMD1UyN9<~QuQQ_C}H&0o5$4UdN zvZa$!$8k}gJ(;muVU~+`4|lbLH+p*#1SNf=p--_|(8f>R4*RqAQv;C^)pk+@B{?a0 zXO8Zs^__`SdqOL9bvV$XbvOU5FSYaP9s|WKj9NcaypUj&2p3i-t;`S5K-@AI`U8w!OA(EcEW^nnk^x z5~4_?9(LkPe~~bDxJQnY9w|7FU@Gu6m@6_tw5nZj>aS<(gy&^(=J^ z^&uBjpQDCK%#7v$R-N<7Dm4gen^_`60i$-GZ~ z0=_QKH2DXN&7&o$D&wB9Uh~Q>8DiLr@q%|JHfA$^NKa(xBE6GfTg!8t;g_|c%>kIv%%ieCRBnf6i8 zVZu~*f}&>V2N=8I`Sfz;(3Y+idb)_01ek|#p3&&K9vi#;roccZp75(Ud5J2L$#R?- z_Nr8JN@>lVZdViw3{n}lA6CSXAz=El{fFg z3qz`d54wDBc1wO%_DcE-vilISJXiFiG{u>avmEZN^u*dV$%NRTd?v7bPY`eA8--}0 z_z$#OqMDOcTsEu5EnW2L?kZCI`RVSRehviIrj0ZB%#iqW(5*DR{V&MIOB6edAKR&< ztPg?lmsf(@4;=r5%s=!U`7X8h4>S+SHtx-{@u-VNEIw!Nfs*{t$$N9WNv){UT0L$W zwYU*6k||wS#}=U2oaAJ4?o)H_T&UzJ{PR;Gi4*AHm2yjX*Hqpc@$tx!+nj3m0(+>S z6BQTdSjd(_)0c(ozhBsS_iQjtramH5lN1E~VNp6p9E+g-f|MiL@O976VAV1KSpYVu zWlEb+U2nBv)T7AaD~t`s2EUpsE~Q^HJt^<|;k4@$1eJUEo_&{=1hH6#%?0*aK)vwF zzNtXd-Z@^*>j9c+YG)5<5X^?EMeii`cpa7~)6&Ju0M(QmurVs!y}_V;I7col_6Tud zf3WWhyC`5cx8;jAED)-r$vWr2!Y+0c_n6?Rw_X4Pj@Th*XvX&hADVh~XNIQF*JEIl z`TMYD8TfWUbrme9+rhlOUiE|eZ`d4U>g?!^lijBB!L+nMT6PrqVKG!*g-!H`Wg)ry zwbzi8nmZH-p2lrcNf_nkhy_I3l*#4vBpzE>sxc=QX9Jt8kIw_1ds zZwMRD_!S_MeK7U_qvqHbKa|kx|KYUMX=lpZ2l7sO?KB%|vNzx=VP`UHuY8k;6%^O- z4J3^1pgnIN^k2DKTgW)87Hj3&88@L;u?xPqJ?Y3+auCg`!czHSNl?S5;6if_uOP*1 zr_gY#fv{fT(d}G{7qg@5-N(jnPyN#=GJzT87-%xJnG>$TkoafTb|k+$3x5G zzpU32y{K6WY%c>Lds@DpZ0;A3!lF)g>lo$oA74`LPu|^E+6$hyV7$==An#Cb*-HWG zxEEAArzXG-Jp^#Y>A_2xJx9UADY1epE4oG&X_^Fvp7w_D%*c@Zb@N?llRD4$H@A7& zQ>Qp>1pgXO&+cA7x_L%MaE=Sch(iF` z)PoXxuUAA~ek1K8qIBuIl2S6llK=|5IP{CgBp=u4g;c6kAg;$SlOyw-V>$xzJ9hE+ zg$(*39Ifn*XjfPeZiaR#8b-?b@{{F{_8uJ01<4Sd}Jh=3<%et z6gGEWZ2I24TOPGRa|g(vGwPOYlQ~kxju&$X@x^ls!bhPjm3fzI@4uRK)5+5_@brz& zY=5K;HUbCbM%FxZ+e@IdFL+_ETd|@GP&DHDS*vfva1V6TXAJzW{09MID5?m6wiWgT6UeuB|maQ#)KDUJcN^pzk-I9!@G!P}DJyQI|Zd zNu?rr$Q(708$aH@Bf{sws@@d5?f;8bxF`K}Nj110iB`)S4V~-t`06f2(M7Y2h5J~9 z3scYyeKv(L!dIZn)(6C724|pFAQxW4Eqh|IM7N>zQPXx(MP|B@@ey{6!ejpATFc-C za3+AA4GSH|cmn$6?mi(pKyt8;*m-g5p<+#AUv7X72f+XqQo`Bum_zI)mGIdknxzA< z;|3tRfRAqjPP9ZKn8=GESV1m!X@%-yRcvzxUf{b5G-nc*Fk$Z&K1eC?oUui_Tv?f_ zAe$N+JIn3fb7$-jqGXRyxW5M3M>wjz()|INO!R(tZ8>J(4UzR{^uL10Q}hX`;T!u$ zYw09qz}f}C8bX*t3dyE^A9)w-=3(R^v^~sBsK&FlS#G$FlO}8A`(MzHuy@?Ovk$+& zvE>lCTe~Mo$6ye-g4iQ8; zZ+B%vR;i&@&-h9gUQ?fSIFV5TWz}K&TE!)4^66~AuHDdk=s0n1pC|AL7uwrBKqI&o&I2E0Btv15OIO=VC-%>wh1zyFvYb;eIzMk znPX8p0gwNygJ1(5)06by*10=1^cP)w193$@zVNIYscx+ne~ycce#W?y*@j||?i~%s z$|QN_b9i-YsNJ|*nRs<|p4Chy$=5Oy4{rV>TusaH$@xsrDEO0Nz?zRM;98LmCjFnK zkcg#q-Oc`^4^C+Od)Kj6i8X{`-u)MmFP9w26PMh9`!n<&xw9+rS(rX8h5Ke)?ddet zz0|y<;4x^zOKDoo2gzFk3n^>;oiUdJ?*XvD%X|-+zs@ha1VEKG;a9={*dx)JJ(0gI z#{NF>{vO>W3t1b3ZT?#w?g{f~)8M!d(7zxi$Fs47XG?sf6!ha8{Mm_FG^kUeAL|b+ zE4Nzm%@@Mnfwy3*EC=hdEfcMXpvRa0O1KRxu6NH}EJG}4Is{Cg6LVEZGk|x$B}r>Y z%(CQ)@0aJk=fCd0VWg%=Hazt@W0T{`{QA9vSx1aj+b??ooICwz59 ztgh3K+i>7qyP|g~2T|!oj&4%TMjUa+xI7|>VSNb{Y!jKi%PaJpkA}*%(?^BLsSgGo zzwvrDBGy58CON4zywerw^4QHF4=_2r`g`9i%9&Ww`Z+CcrZDfDNM`OrmO;;nCBk9?RZ;^i^gYkX~%R!+XJEQ27RZF1xna5cQp3&Kc#>?62OoI>%$)81lCKO=Cbt zy5BRm$hIgbn$q%^y_^gPLr+BXBeQ3z*9y71yc1$8+Qa-zuln-BzvGrsr2)GX{0^L7 z-K;hu!+J53;+o6IYFU`rg<;#nSU>OW(cCZ+()i8Nor1Xgf;FG)TIA zAgCWO(L9T=#G*xAB&FCtBMqyW&oEyaEIV}qEHOnJStIae=aDEIFk^<&&F zuQqla`{%q4h5C>h z!h8vt1S`2Z+R*t`^-iHfXd^5$w|rXL)@ANF{w-Fco-UXj#OwmN5EKgEc>rSaP3w5F z(+4p*x&6>qS&!3bq#To21%3;Q$(euro!3-VQtXldZ)>^PD4gnBTnKL@tU&=fs$-(W zh`Y{zL~Ow>z!YwxuEO^|?%>YMTkt@}8N*)?*hj$3UN^Tr}ul-!*SFQo?|EZ=chNM|xTsY$i| z2anSpunEGm@ zA@r#x=U7(Tg?#Hhw7WG6Gs;^s`#CL0HH-58vRD-?@=;qqN@ZE+eWwI7^59UWjrNcl zx_53?AR4)D2p67IOQM(YXHYBq3(6n+PKdy`UXh8I50V0uM( z_JTjqSxus=>gLe;cZ&U-b=r1EU~mZx3$#cQylJ4@u%>7Xiq55291qO6T*ImZQkbIk z0lz(lRtxukg%UYHeEp98IH9JJN})D}AjF4YdUDA2D`K+_B>nQDz1VPnLGHkF89*-D zcXj0(?rdG zL@_X71@WOdk1FKK=j+nUFoJ)AljhnWgD`>xFW^_I_$rb!uDU!gJ|7t)!s#psSSuL1 z8xs`B&F<`P7h~N*E@Ma%>H@l9^7BsKxji)7YfaIdg@D9av+K&(gR!OjZT}oiUZaK= zx)-$Fg)e_-U~F`4gnqdW)buKX}5FCx3TIG#1V}ehCN5a@Jmm<@B@}F>*fI3 z9}mmhG8R>MW^T>)1;T^m+Fu`%pU;GDNsttEioror54+<^Mc* z0?mwk6=}V4oU8rvJR4C^>UA12!2k3&7yh@?M7(g3`DbsYDEp;QIeV$3+on?S zd6cdR;2^Z}9S1pnYT50h4*Nfk(T-eP=JVW^ALj&y&}_gdnzyJ$ebxVA+1i#) zRfKXj3fAYPu*Zf}W!yQ);_YecdKUCK7SW+KJQICPmvorSXB4 zbQ0$goo^Jf9&bxVU$HW1YF#-y{hNyE1=4@oY|O zeT{vU$7NAE)7Y@L#!Hu)rD%g6BuHGJzZGb9n7*OfOjE|UtO|Te{V>wuO2W8(w95#1 zvvqNy;A%_TQOTU25se~@^!867p<8+zADEM>&cN=#k<+eh5d1=}Cf47&nFw8!rjTt7 zS!(mS7I@<5cSG2(h+9Gpz)#fYMpGN5$}W<^)^H2-#MY3-AAc12k4Coe+SXNm-A87c)j|t%0)Ib%n ztqksCwFRfMLw)V=KVX2uzy+$W>y&@0SC;0`^~6A;*97JSZI)o!DJDyoKDH|(V}B+X zd4yEUU(Jp-)AIc>J8${W^(F=~zlMSL1^&mrY6>@-YkI-B*`78;EAI6#&>A}Vj)kh- zzhfyp6UE-}{H)WL7p&&kGg_(7*}sj|7pB_4 zJQ|9kyPJ^Dxjs9v)D*WUwh#NG_R8yZbaHY8)RW|{=wDFCiNM%-MiFoYE-+zYiOSMF ziyxWH)7mB$1n_5ZBdu+4bG7U5w1SR94Q!-bP>uxTp}B19U(j29Qmyiv@rdBy(8pln z7_9&Jhz&!*weVWLUx0mM^_qWgB06rQji40<9GMW1HMPD_FTz9~Gb#I~i8U6v8&VHh zQPUQxiohscn}!-yO#hy4zydv+@nfWoC@#5lp~}J05$@#6ne?hmWsSbaw%~4 zNbA>`w;sTbR=|9o;8kXW0I+xupzs1YKjn@xn4U&yzrcKHa9G0)%laRyEt|X321(TD zuK#)7Tak3hGVlfUI*98gcP# zJiFqsK>e?P-6N99R+xUcHLr9tY?aSH_xkpe(HBT92^LAq;joUUGx4Xj*UTNvU80-Q z?B_4Os%bemsWB65A$ntp<_iWd-cQdx<{#1p*oSX2@Rgl}JXUmhsxYCR&BQgC?i`E(VPs}P;WY!#(4%4Ys=U8qy7iC`_0gf1AFDBW; zW~vw7F|NHzt`mm0QNo5^4t=~}AzvP6+zfx5aMDv+C;9|Gd8tn5)xpv(sIliwxRKS> zh|Svd!*XFmUcadVMg_E>nfo>}U;}?y34RANgA!45+@2l{5GbwHj?4GEF0ux1pI<)0 zBQ6>rSz&Yj#QD^TMv+hz@lq8P{F@a&uU%V`GiNd*Tb5C9XK!#K*9Db*30aIl0k`al z*06dBL}Pfvwnf~PJq9=DXnorQa3^>2FXDYQ?oeH{-dOn^DeSpRF7uqF<6OkC@J{)^ z*?%SKZ!K6Qrwr^}$-+v^tHv!}x+jfuwaoqCZ)f3%#-gavj25%*d7-PmB{WZi)k)lD zZO$FFL&jkh;~qVwdhuCi_vnEE%cv|Tou9a0gdrk$T?KF*|IY#PPk#S0Vm2+vx6P{> z-@j9%}Lv{=cNrWZj&bQuocnH8*QlF1*$B zU+tY>ek>1|R$C5)5|)+DfL6kH*VU5kl<#4_pFX?1xb1Y0o-pv|bh?#OsF zvljr2h$2)ha9X3x9tdw#225RP=<56Slm++-!hCu(_k`iyoHO~s0xX}Xr3f;!|Ii_Q zZygC89)?U^%+u=K>$lkWDj_Fp3S|8cL1C_q>};vHY=+$-I@MhS25*f+PGb8rynCf8n@#`JH z{(?e7lb9jHV^hNUim^<;m_Y}X3RpUT5-FZ+Fy}^p`V4S+((pa?LEeFlb(aC3xXD1@ z7m-@A;%DTkHo?KyM;+e!hwfagrqZv|9_h~Nx=xUCMZ$rLeX++KcKyIaUX>q^k_dGV z_bAC~`bA!7rYMZ}DK2X9-j48|c8a`^kG2&CUT0xLt)9Ri)5U19@!gdP)=u*b8=)1V zvw9!pb|3n=;y!F1>J1|aL*``26gQ=I>3#0g?L<3=*cI^acinToV7M%D+STS4e$+Rz z4^mvGE%zY-Vq?O5+p7(0Yu%dAM9rG7;%Py1y-fFdohk&cQxG}#%CQ&n2WqEAFWY&) z&Wrk`>YiH+%{!t3);ykeb5x33m=#N0W2V*jNZHtEPWG1G;N19t2^=!Xx$`uNUBKP^ z=Z!wa;r0-|Rt=!-#GLG~?((OM(yMo-MKK!~Ulr;?J$mrs2Nrz}yz&H?y>Q01R_C$C zA+*W?BTv<6>PFVa(jrBx-+wPz-@sbiLT7$d>475TSNb4vQewM3%9=%}I)3@^ozRM0 z{%d>MKwbxpyuUoM>y;$zQ-5IOW@w9QFvkl0kw_R!mAyi>!Z&_!hlz|18>T25WNw z3~e3Nw|xn=Y*UUQiwwe}K)rl5Kzd}6q6LC0St6NZJ}k>CCOHrd94r#;EW2C@*d`J~ z+BP5NI!|Uf`f$IwU9Bnc;=j2#xnczrCjvYAIh*lr56aV4;_iuWcMV5<_GO$C__?>V z_rgc?=hE+tRBLek9%Lovyj1(UhSem!p$_kahgeR{q#wU8eV=zU-GC>ppw+s`M+h&; z4))!s8=Thv><+w8Ofy1%0O0DjlA&P)US6fCvg&H9jPEiAtv)Xlq z0O)U6!#x5j=K%f2a2)Uly}-aC4ZpsC>d-mt__uauo(&_*ZppaD+yJ@PJS#Yhmj*n} zIAf%yc5)-MW|iNa=39Yc10dNm`VMgPUaos7m81KW;s!lilt54t>p- z?=}e0m8$k_D>tgcH!QaGsr^(LJGS$;YUz9H>{o$9037hO{z*53h5KU%Jd6yaX7%6d ze(_vrGefrYR&_|OOq(w@l9yf}C|{yHYmxh-E~rH1#)nGzEYRgwu16X`d_e29S`Ht@ z!?`qY8)U;DT*Ev+I(#=6ImJ9lrTZjQ9zX`~ORr+PccW`AA75C)ul^^yU+!f)MuqAE zunrxYk$`O~ks z|9S2nVC&7_0OL@v>0+jT5!u!pY@N@OVYr{5yb<#(rvJ*`pi;^!9{RbvA|GSJu06K? z-xccr>vzLZ^=FhR6_(!4mXd?Eyua9pT;he}Z$)N3mGtt^Xb@JZh_F{7`FMSd=__ zWJc`{s-SGs)AiZaxX(PA*0(ILlO4-?&x&{Xudhj)PFS0p?Ry-?w7K*DRMaJPi)4aL_`o)UI ztkR;Yv($}K8#;Fzy*_!P=4K~St!V^Lpl;4HZHP_M_w)<>6jU2Q6>N%&&KL{LOY`q= zyo-9rTC|U=WNU)Ga>|wawF~7T_q` z^%LF6AMYAHEdR$AWH!Bj^XR_gRh_T1l}}#IpQ7FPrmt{*NtWA|4#UqjoHg?H29e7c zE)U0BVTP+33C7DJ(KTD?TeGPJKt0{ANn|y^3fJ{B-61PUpx=zT0P-ZaSeD#^iDT{ej~P@&l?39$Yi``pO&ZADw-f zCC_MHlBVXwR)?n^?|S&mzS*p^3g=uOc{Epb%e3FqtY?H3N?P8W^JnM#OS94{=GZIe ZN}2>+3br_ead!h{(+*5X=JEf(2>^Ms=A{4t literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-6_hu_e56d383386eb66f4.jpg b/public/images/blog/blog-6_hu_e56d383386eb66f4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93bcc51939065a7be14d21c8e9c90aa889b7a6b3 GIT binary patch literal 82540 zcmd3NXH-*N*KH64M2a-&1gQc7(mN3mLXj@LDTtIv@1aCNM7nedy@L>t4gus*I!FyQ zG-=X%XaT~F@AHj2?$3MgpYJJ|a@JgP&UG_=GYj|tASSv^e4B`v_%<;K z2{9?zJu?wnt+g+;HHxx9{?b@P4J%s z@LvbPEkgXYl91jZyL%6Ci-3^u77^j?+eAe8Uk2m90}xT)rgL2t5qX*pLww|GP$nG;RGBNY;@;&4ikdTy;mXVcHd8VocR@cxpd|_m4Vrph? z_uBrAgQJtPm$#3vpML-}>_hm+h)*^aCo0^e7 zJ370%dwTo&$57)FlT*_(=%wYA)wMtC8=G5)N5`0x)3fsnECGP<-*E7s{|5Ab#6yjb z=N1tWArZ;ncnEI!;Rhi#(d`GK#5BtKB(FSZImO^`@| z63^k^kp2_V|6M?#|6dXP?|}YyJU3_nIUxc5h7nQ&K!A$@O*i?c6EFMb=y}OV^hk+t z^|7pP%$`>9#F4Z?&iym2>~_wcbn{ZUak!H9_8fPa)ah1le=h8COOYYUo|eg7m|ANN ze1T+s>sD;~`HNK=O?;c6pXCj}+q>%}eB|(+AYzf2`j z)-iwI3H=OxqzwjQ*g_J!fAtWAu%90~lNQtFA85I6x914#pnzuhf{yrY0xf&49S_nM z&>w=c$8=FSo2t!6tw49(t2(3}h#+TM&mYWZd^CkK?-0nj{Ed>Zp|jOkA|bRe&Da~H z?KMw&mv`2iKf{8U9tDq=R+_hez?UBwrYF-k+ZZ5D^jYSg_eu6A_CYQL4jqi zr2#uFw?u=fPT4ek3A4$1#YzsiC+*X)HsK<+LaBA>u5^AsE-X$sbD-wi9cZ78KKR67 zMQrwB04Vz*P#S%Ki}|PZ{cdH^NBxM{{>MWBByfZkF#5BuWMvWaR|JOBn6NgEF~n!c zKvtk9Rr@xbzVa7+RXV_b=P(G<(0oW(dhQo^3ZkE8;85kd5Xn(vtQe*-ll<5i{C2}| zApITt%nGLBGQgZaW&EmNnPentx7Fj;7S<&`Qs|@VPg2(u@O+AYA7+rN0odBnB(%JL zB=aO#u=(J5bh#rsK7#wf>&$@D4>=dkZSB;SvfIXQU5jd)qn1ftr%F*)P;o>t#j%&v zW-ZJIlkUCp=ks5)s*Ev;$YWDg6Nm3BXgDxLNwlAe}_(~DJeqbLk=;gs!nmLHs^(0 z{I1pn87>WEksZG-)N zl1JxAqs$G!DR@J!bRt&$l6jGD7Dv$k8N7tf$gZFA@97}aq26M)3|&{pPm-3^zSG#| z>AwvZ_A)LI5L-)K%aS_{R@xKHFeCR;^Q@E$vwrX8=Cm@eSowB>X_aPk zD5?kPWo7=z{XB~9*SE0u?j#=j);UpzXyA&!*AGRN-6L+MV-*Rm(EWTNZ^jPn7nsrV))TX!cC zdS5ED8h?!VI`4RPXf>m0mqO_&2ejL@Dy}U;`?u(%nT_O|o;>V!dz99GsV+Y@y_;+- zpfGwqx!n#wR@g4>Vv{L(Ea2{6oG9jB>`oQi|LxTe`VFX3iNo@>oFdTrGq_Yu)XCq! z54U2Hi5l&{_aY$-{n71dOa94(;%K1dSS2R<0wI#m|Hy&86B;&W?5Bxw;WDf{49Q@R zuSE8gc8far&kx%>FZ;Cdu7leX$4~L|-YS=b+;-%>0=} zgMxZZD3N?*?dL8DhX)aExO%_F)6@_-RF2-*=!2;TmUHG|oduTz`_?Wd5?N~7T5VB# z{cocDhm0bQl*Zw5?kD4ledS%4YfaR%k>1|l9}PoEf6y~ksgJ+i4e~1KE8EnskQ*1w zXpy`Dq=sE?TKkAeyfykkPDvT4moB*xsAyarC?@wXKYhpowa;7K67^@&ILdKo)n}`? z?bhkoVh`NT#%ZJ4|0B_0SCb3_2aM)&D#K`=Prn%@VvDRzC`gs+eRcIc87^09tl!F4 zVRPd1#|SPJ*^f+l>8{Mkfi)BytB2gxW!ZEqcM>gx{=#315onv_EN!86X{2+_f{XQK zj9ylkby(qEz3vIJVVf`6 zeAic#Qw6TVd1jPUYOIg1HkuL&4%)tg$F$P?xW)@~a5M0Mw&v8mEsb@TG4-x5D`f~6xywf(wLRTt z`dVS#vy3&ulia2Ocz)tch1>SrjpTY^DcXtW-3) zh?+k1=j-&dE-c}@M!y0sHU4QgIBi{YIDEmNpXqi~JY4B<1DGni2XpX01K@TmNjdPZ zQJwaoQvW2cABC2p7lpMpgBnGL8l0y?yQUGTll;;S=kEwXMa=Mql>lF->$NOmLbqi> zgxnL-be{V4snY8wrFEoe3m1#$-gaC+ttE%qU%$y&X1b5+(qDMic}JoAeS8q@RoRr7 zaMFsGK;pOb30&z4-^GYgvsH_H@T%16;<>@zqHJonvYhZ-Vr)mqvoOmUMs5?6l7}b- z8=;u+#08VUH^XNv;h=Ql=E0{kyKcOpPgJ_Q)Rnpu!j1BS>jd!_hjsbC6X^V1+u%=P z6u@%I=y#SUi!3jyUXrTFh9c=!$kNWrre)DX842dmasfjFwf!gzleeP!&z@i5-REzB zzAtvbClv})PD^dhC_Pkn*fQ@8K!xv`dHWn;(+HZc5TV}igWk`boN|`^4=^a7Ngk6# zXbJ_I!>Cq8KGqLp-8In4ctaFCrFL1_Ha?}YtVoP9td?7kAb=R(0OF%xogrr1*;6`< zdp_3BBFL^?g&1ERa=Vx8>M)^?Fb|MPgPR_##VmyXU~MSEJ1;)N z<>5TV&+8eI#`gM`VPT)4CU#41G(Q_$3buQvm|x_0pE$By4(uwo$t6?)9ZbNZxR{k@ zx{bL4dmXBJxAWQ#FUQ6^+^)ip_%0B8hAE$6Dwg}2l+K@1_&o=_MkIo52Ra+5H`%#7 z*!qJS(t5rE_nP+v6Q}ARZ8X=rB6bhA`*W5&wx~SJel#?I*Q~yWAi%{GPOuWkUpmfrnIW@R2fydUY8w?zT*|KibKb5tYp29H7XHlrwI zyM8ncc>9?X*E>{BtLFQs92lUMz=R$HvW-@& zrRF;MqSvn!lRJVK?)D>Z0I^{H*+g$df8B&-sxm)th|=|F(2?2v~KZvM%tvvZ4qNZ^Nc9 zf%;}WjLYx4h($BP{zPt||D-rA&r6;lh$XdFnObZ0hXRpN$Bj>8jA|3inJKG%3Y3wyzEmg&)aA0tldHd)aMhD%YLx^$Scnn zsoa!Tv^`TDbkjtRiLBMNMdIOLuVRm_V!2WqpT@Y5f>UvEQU$WB{Fx}kcku`X{Ac3l zww(P?Qm_zWRZX@)#$K@vL`J(|&G|3%!ByxLY=R{WWwp?1MLtC~U4Hh0stOJQ9T!0T zU8~CK5_A6^?IhEY73!_(*r^7stB@MLs*8PVe+tJ9X#HetX-|MXUzz|rRp}m8J#QSG zKCw*>-i2d#9QH=LLs1^q(aRLPQ(ba)+h`(X;p8``ebBJ^ag*$tl()>Z&GZ{`y2wDK zm4}0L$-gLssEm=LC#01-g?Ko}l}%NBT8XkjA%e_``YJa>2?FjbExrj$0WI3-Tl=;_ zEIQy5`0}jF&vDvkDfxQJdMmh0!e<0wzq18lI1eZgWX~K8+q8~HoZA9vRoQEoOvf*F zqobeBJ{O6D5t;!Hs#;ZU07@!29PFg@kLm!S8OX=VPfap)7idjA2Y4zQrJqffO|>-S zY|3)U(rLl?hc3yEpx1Hs22i2OTcb2#XJ2|tOXi427ALuX9%W@BjWkNZiE|RViS|5| zH9QZ)8j96dxxy1?L{3dUElk>m40AEECdH060&vX*>d`yqm`Mf&@MDO>z)P<)-3IiFTST`B*( z|6b^V^NIESC?Cni@zIzgY#WZAV$6tEG$*_P0Li$yDHE$GurcG-{E@J_+vD6{Tt{@8 z*$WabqMi*YZEKaRY821TZl3a&*$Dg^Qg3*N@sz8D)hNnOYM-p0HHs+yDq8jG0}V_E z8dpV%uWklaE>>5H;tne$40h-!HU7zkXK$~5;!J%>!aaFfVWKsb^xP1a!ga^>TgWDk z4jYF%5qMQCm@|0GB> zdxt#|H0i1l^p87s>NUBWliS4?o@X*X8Q{)QZ>aDgZUA-C^=3h5O4@UnkBTb|WZ?D0 zMRx*cbMU9T&d*Vf*6*m$W*inPT$BAKJbzBKkGd7S!Ip3YrWRW<9svcP0ak;92p`U_} zy0|N9&c$d*9@|j&yzJM-6wRLIkZ|1}FtG2aDRB!! znJ~HdZZe+lp;(3F*7x?qm!=&sfzL@^zZdA-YMT2%J54tLRs(hI^{|ykGl|`+Js2=> znSvwnkG7x5Wt`{dF}R9yHxHfulhCM#xwrm1N3u_0{yTO`N>9PsgS}>_Qm67f|Af9; z(BZCk$aT5z`el8WL0Fh_J#%GdWh{)^(F96=(SX$Rlm>HN&zRKmSG=EW(WTgKNW(%m zl(={*B5wd{&0D94*_^#eV5GMo;;tS9Qba_Jlr`MbY)jYX(yTL#uPbR>yY{{T$j2O< zHu~i|MMI?I8+xQe2NDehpAB|wp zi`(n!SI+`FuuVjGs3@z|G}e|?z(ge8+*AIOR>FnwGhax8EGx=cxpjttH^FdJvsL=PrY?qu{oncCKXX z2qlGgi15K2T%mf-qVF_I?6+GZ(gyj@4d4!jvl&SVO5L0{ z-&M49dAd7IdyQUi1?O9BK%>#~#iSPrQ+vH_>AFSs>6dF*h)*w}IT ztn^D=pWMxu3I8MA<&7Hv80(9X$s7w+Caw_P`SSo*z5 zH@Qh=6m@cn6C zfiwLD1NTWZt}<#&ZM4~h=pMez=Y&H>PUHn)EKXz2NCl1i)ntE;`be;gr<1K%)rXzZ zM654Iw4v;M^Um47ULv#!&5)y#q(^~;-U;IeWH5QrFQ&DlS zz*de1!GpAZFBJuR<1zJ%%RYW2PUCs>uv3Ap)9fv-}qldWKGk!3M8RPU+Wq zJ)5=CwKMXtj)y#AS3((2?k0-R%oaarQn*_L{JFSmLJ;UAner?3jJnmJd)AE6lQd6s zs-SPb!?dlv?;@qlQGz@U&$~eUy)0Tr>KXTTRy#z<+p=KD;PS7BYVi)0PO-}(R2maC(~u5TkW5b!+mk7~Di zLcl-Rn6V8a9bwESsZCu;U-lR!_=Mite^G7HJw_w+N&mbwW%HG)Zh2Yt%XOge0^Y)+ZBC&!;u7WFNd5US0qy}7IP|{CZ|y=<;-`p2U<)Cx zK?L(9V4WkVA4KVBAkr$erS=9j>%Ly$G9E$#%+d(vJAKneaowc!Y}WN2v^;nXXIu0H zt{bW8I&UY_qvu77xrU{PC2k(w066P=FKxniSINjzJ-?X7?=^DZUZaA<@~MMM#fYUo z?>#?`;0Ac?!t0A>zerl_GOrN05`3V&Ui#&5SgIh;=1nJu;KW)2`R z9ljcS@_ zq7S|*W@ZsD<+nrUi_K1^+$*dwJLG*?Gxl~~vsG&L3zR_?7y79?h{X=gWL%iJdp$ZGVpOHMlVa&qnTokht$wU*?dJ`dI@hH9lVs*mTt0j$*-fG-e)5i`Mi@*QNt zLMImYy&5b$f5Yk`+^=tod>BSk=9MHiAsbwpaYsiWgwa83AD$TEbtg-gk{g8%cO|L=x>khClmOC*N}qv1bt|x4;3>fv1ZLgvcq%{ue8ZN*G%6=)&F69sC*A+)@2Z z5`)%UJ_VLAM9h&bK7VOeEiY0kMapRrg|2I7x;8emu|k1rmF^CblX!;018wm=rM%l! z0usj#S`LptEGZd_$V12_;4_}#e=?q~-P6QkB-Q z`^v)xnPpn37FmrEJ}uf7y4rU;<3ADng)@_b)3o!Dtbe%~G4lmp(lyKA8HQSsdi$~- z%{>KB1sY=R?5M=~`77n4ecgpd*M8lzKt1oDTGZ?sS5`ngqS4)&Q}WN1qM|QZrntZV zZ2WayTRfynpd-a+=O3)`%iOZvO+6zcKHU&%dL0{@8C*O@ zMqIO%d34G<8o^?aI)nuYzfeRz#;?gdw85Y08690ax2wRv%;NOcLivzX%*pcxP@Yz9 z(Y%4bDo|7q$RpS0)0@r&&>+!3e}8ttl^{7Q^KOt(mATb)EMaFru;kE#oO6W5IB;)F zZb{NwAagzkj1`Z{(|HUwM<1%a_sQKNzWbS7ie)KXR>QEGxZ3OaS|%&cfY4CmPbKcC zu>~tZ^O(7fMv}9H6UX>7)RjOT%;HMLn-Y!oC2V}{#n0EZRnv}-V>&f~BXT~T0rq4ir!!Ql&$YlxvJc|I?Mv}i0 zMrF*3PU!mSTSI@BzxqgVXAX{GW0+UW@u){E4SF6w9XHtO!@Yf#@O>wG?r{bDp;$~N zbF!a&JI#hKwBZZx!ND@Mt1i|kmvy$$ljIEYfs44|ihucT7Kwqyr^me=Z>y!}6M`w+ z&Ko;U8;wB+pZ)#TQLD1>2WN;y6nk=mJm2k4@%1I`M%aSzf_8}tQf}%njTi1oXv;o` zgxAxZ$`~dy9a65QDpf(3m1_~`g@=FKj4a#jvG{Fk2V;rLz8%-)ruu{exYS$>=))MK z3>8teb3IeuwfE8L$tkMUpqwkOL-4Oar#jgN)TQ$+IfC z1ZFXnP^vsSUTvt-;DTJqw?%XDEiusVAMi)Yy zp59nS?NexGO&*Yde~ANspZ!7VIp9K~m= ze@(iqcZ>I_bP!-)NYO~8Aa z+W_G~S^b@^@8xzCKi;!-^SqSppyZ|-0)Fa+; zH=4WdccrO*?oLUbxZ?i9*xFIjA%0>E+$_YfS+QyTNkAeuCG{a#zLmyI~BW~=VGeI`3tx? zxWG)f#N%UgGO)Tc7|NvkZFk%9YUp)BR^+1|?xaL*z;&?l%DHfIE(IeKAClBv zs~)=3vfTYWBQ4cyF`u?3ImEoN4s<%Ouf08BK37AF8z7ILZ0=B|KS`4gewH8g@G;rL z{CEEo217kvavflen>A`LNcJmw8*1w)ce$$v8`+z_8j;;7#GAsVNclI`bd))hqzlZ( zf>HC#a=3V}{4E-DYu+iHl>*AnKx2D9tW*JH86l=fYno#FJ;tTF)wSm`E||gt-jL-} zw5a72Nd3`&h)MUDeVo?{s&CU;a?swO8Hs84tsWP{mW+Un3&QenO6v-4h!;uH);2t{WD1QrR*ici>+sx@J_M4>q(0ADer9j|OOVw=*DKCF zna9a-=myY%&C2BT5QjWi6S1-mbMVR#fU#Z~DfZ7!83l!fQj^>9SKT;oQ!JrT_s zB!n__UmHq9ewrix3-ER5lj(&?@5PyH@%q7BXL@W55P;uXI#+J7U^sLezd zuin3@Z;i~)=IwZ}djpvK>aeZc!M%(Q%)*72qR&g7M?an7nF#<6*g@w$<5wSRx`t@| zs{nlJdE}5VeHpL+qQHxV*g*LN@1M{MW3r4Ug{ru^Lr}69q%EGGCHkB9M55BSUa!9+Y-&HglykYT; zZ>+?wfhLYqX$XdgOEJIsm1TRcwhcR>LX#1teGotPN!D^-AKbxdMc&8+tJjA-J|@S} zIe)EA8x_kx9QDz+_d#3e7wv`mIIeH+3Ron zVhqwf$Pa^$I zVX8nwN-5P#SlP5xHFCU_JzB`wuV~YZ`VYT^C=~@ zha_~Sa33BWO?_VnyA>*`A8f7A$&U*m@t*!%NrY!=m`a5hA9|F(NGEI>)pr{mfVCeU z@FMhNgudT4I7f8|7BNR`IlN1F^BVZH|KXdkS z`uT!g`+ubuXLGqy6ODfZf1}UXdsS9Hf8L`~+lK1-bfp9u;Q_UOpmbSmUxF{Gb9}}d z+00|gG>2WYLk-IIHNbBTMdfpdA*qeVLQ9MH*wAm+&&1fjfov6Tdo2iz>`Aa0TgWH$ zUZni9G>&;?2KapmHOW8sJ)P=8N`wF>Uf(T!dgohHNc$eG0Y<*8&-TI2`k_$HCJvl= zoL$$7w^1ORjm7a#x%qsz-QTA?81}RLb)cb4rn#>pe8{1$CCa|naawxSd9R(cae{4` zF-ng&egjX5l=vsS*y3Fly=)1m6=834LdDmghuk4X2^Dtr0|@p9efg7B1}omYpO%}%ZL@)5#Rj7;9FB@NNp|7(yYIPv5e|O`bPlJD&sGFhKLlUof$Lkz z$xjzIj#-bu2hzvIj*qGrwe9?lz~03qy_bk9z5|JCMpDVUu~KJialaXXd<3TWrQctS zNbWmhals^86|NOKCyo}h>Q&(lTX1d9sBH5IVCxw;A=70f&&Gdq~hF> zhEvJ*V|>=I{WjRwXMb6E{iN%*l^Y7%zNPw_dA)-Z)4cTLZ1DC|ogyR7v`=$N?Jy2SS5{m-%m60+ z6KWV2)Xekg(p%;la?4nFE#5$bZ+vn!=ZLpB&_)WhpYY`OMJDbw{H|noSOwanQ_H>G z$Q7o!&Qhfa$vrR?bB=eLaOFtlRQl>+Dqf~RmYutDv>fUTA+5n%$-)45^zuJt5U2`q z6y@3_^ndGu5@&c&#nyGAs^$$X8*MNaA6JI;ugHTT!vc_i>^sKlW(nhKX1W~MsOO7R z7Bel9-e)RR2>V)O>Yb6EM=tfrC&amI?t&wQra?Z%O!v4$xa*%I<8Gtzwy%A%-@LKQ z35lu#|NIVptekfnD!`8MiJqRr>jm~B`x*kgbzj~#y>B)%+}t*~vRm44c@=LoIyYEo znOWc?3fzUAZUJlNvWb4f2y@JreD3n^2(L9DV+-Ko^~tA_Y^_y9Q5$AvI?5zO z)C+Bte2s^Dshr7$AzTf*3B$KG!FIR_p}2{+FW%xL@io#9g*jBdZ)^wGJ+LeZagGmB zD!z6t;Qpjp^X&(bZ)vFv+{4!)-)!#33PSXeTcLWZ$}M26PUr0=n?30^_q53*(|Ij7 z9~M=K=SHI+$#OJ5GBNWTJbPoTMqbEz5A0zbNgdXMd>LnuaGr=(P+R?N^>7DY}VWy4%?tue;C6ccP~6#wFbZT}&* z@mkz&p~S96$TsoAcb?k)H5@qmO>$5x9yM)F$yx0*G$t_qiP^OWtrrXF~v@H^GMY$JVdXx?S9 zdbr4IfoEi|PDoSBqOMz3g8{E;eqq+Cm9Ekhvz|;HF0o@y4O7+c^$wvtq(jnQy552? zbq{=DN#G1tbY72bm8OsCD%+%5cRYhh=wAPXy_@2or0``YJtQ*z?wV3TC9T%7Y~*(F zdOj-{)K}(=&PoCjW^f@bQbSu@v?CROKh+XMB4hS@$rWcGo#}Z@z;ESD)Q--x{rpr_?M#2zC9Lr zj@}JGYxM2jJ6?6&nauS{Swk%Rsm4rCL%#oe`pO6G5x3;)X%4SMMkChYAxQ0?=FSP^ zOjBE50;MIaaj*j8)0~hWxm#1-o#S z?&@7uT@49-I0{3(t*q<00ho3Sg;mjr=;P-!y7&%*3k^y@ecLE7Tt2bO7vbQiu^m;v zy|i3z%{ZUQJ>Ov-J9ult7Z(tF15hxsxaWp}MDrS+Mq3U8)@3%fv1DczyJ&K+GLSRs zkmX*$QT#mU{Xe-*Cl@yWIB!Gv9%i6T>Sf5xn?L?)vK;PPAP#5079NQ~A2IvLNtR3> zc_=OJXxuMNr`8nGF#YIUBbhK>)Su&$+W0=>%ZZZeH?zfC31N5HqjVnzf19Se-y*VI z9baWCRNQnJe?s%vfB363*9APSJKf4z{f9hfoXm(X**&A^bLRDDzoLGgX}R%QKYs48 zmxKWg!dsIoM5Cz$?Fi`0t0bu&NqOl%7Uixt8%Z5 zz}NS{-7?lUfXG1tDqotkUWf2EM+zz>)k7$;yq@MRgNe^wrE}e|P&J#$!jbk>al7r) zPd5O}1Kq<1B$nT2QA2L)PhbNX7wO6Rs>B4Ubb9|&#;q}ZRRG<7cZSvz28r42SfwMu z3@2t;yO;eP)s-moy09+vYxq!d6f*N}#`ZJT#%l?iZA%i(u>)L{SAny>6gY-Ru|#yz$CL1Qu+6qvh~Nm{$O$3cm&7|H=|tOS_9`P`+omrQ z##&%^woZ|$_&G^WzhBgO;i6^N5UcpEB<~S#LwFUvX2HZ;eEqO?0cBO*)`^Y!#uWx1 z!>b-1`Ocm*^ObC}MBes09n+ImibEPd_0k@tmSVK!mZ?}aA;nviWtA4iLasJAi>fo0 zg(j^_*$UUf&}H5@)9G?SO65|-dg7f#^)Cfwy)OeuCR>hI&yThFR--!`Mvteh@!s

93+> zl05t@vLig`*cDLdKl27a8jE84PwtJ5phy_H3Y01pr3N;rz@HmRVTy8FN9{jo#*^x) zymJ-u%zHi=@@`B{1`y^KuOv-Lur4(>0KA_*JKDf^#s z`h#Sl7*$pINVuT6E+rq%I~P}yB00a6YK#*fTb;l(O)9>jAKa~h4d{W^@}siiCR2s1 zg8s!W^Gf{I{PZh4rmUfgPTU5u9~ryE(mTE?@(wL8_CRf?=WA4#@8XS5;4gTp{%8CW z-UG2cU{G!gGkTef(;PIzmV z1UIN(&VzGdT8!+#)o*!bJxZ^%^iAF01<|L3Nc`16`^`hpEeIev#(hkt2>6~Tx? zc*bn`7xMzdo5M`2JmS34ByY$(^2D?)~^@2o@N9xU7gd@2A zfPucMJ3nhgjl2^7(mn4)No1>@9qi>nmfIdED3TD z0b{Ll@djBBFIoqgVNhOgna{^dr6QNFWyym3KmDl(1NNgh2w0#L8Q<{IoRl!=egb(pQ~d7+_vVF zQS$op*5`-awlEwY*2qdCxEPL)w=so$k{|r7lj#$X-e!;l@Cd3CDHpsoY z=s2>_lT$yPK=;9ie}d&;)u_CsfPNyb?N(?~RwMQ4f{X{|)$oe4c~HCVIeE5xz1Ymw zulKplhE5^5RBhYm2Qae8N9l+YHp=G`qqJVm&^^HG_a~Ojrnw&%4VuRmo=-bJWG3ld zQ78xr0LDrW=IlIP;OH(Xl=-Ni)5fR(%vA_}C>RVpSv(joFHA}5F#pAIwZ)ajp34ec zw_FKci8tR_F@2<*cOQCcwnNK?z-jvSg4@99&Ser9m2 zHd1LAcW1yhnGJ8dV00A8Uo2HwH~l3&ix)$lVX<*1LkWZ8*+qYqStJ`SEZA+i4PR>7 z|Fn4q8WEnI!Ua@gDy5B3dlIuVF0P*oN2MlhRB-g>e2!n_Xh>y=*i#mN9{TTV-P1G% zQKL)tG7p4DV0Uf+jt0|P+O~H6ILSu%?pDAiW4V+xzM5C{aNT7c{r1{^iwXhuApfj+ z*k8n^Gl_rMV@g|&mHR4e(l_93_3g0|Ws+8MlG<77J(eU$B zT!;gqIWs%Lr(jFe+DxOyahT|cbdPk8!r_}h09^<@nC|uRUZeaX^`_K!4ivCcj@;V9 z=X)LNmyFAQpv=E#)PEm9>^hiF@UGUP!Ron^wL~e^7;#=JVFYje2s1=MC61*9IB9DXLC}CW#4-_ffpWO>U#FK9~%H1zc^X&os+`!v0=C$3< zd!E%bqoz8UN%819sORjEvf+q5_wvP#?~ABT)rpACMjL!vwW>L)s^r_>9#OS8$DuWQ zg)pN}T|DBk(hS~E-f|a`*t*6E2|NgK#&5JEXsr~FfFk#;p&Lfu!0RR$MdNkw_^Z}h z&%|!ezwH~IAlirI0@8U0ohIau@OXaSlxst@@FGdP@^dvE5totI|6I?qr^vI_ zYSFX%9O6x*pkoA7=8IXU^`LcnuqN-LY$_hIoZf&w~&@ z7O;dip3(v>8RdWOUP}I~+{^Jh-orYkScKg%+e|&^>7NtFI2%R2p7&>p@baDZ9 zpetEaGEA%TZ{8N@AOb=ipyioDrj135x+M!8KF&DHQK>aI6|3RMM@xskaX#0akJCm0 zBD)dRpjcJBFw#!8jkhJ2(GND0xBIHc&nHkBNeZ!K+#S1ozsrsw z5+BwN(xr{LQ9fb4pqi(u_WZ4?6IS^P5Jh9$i;|8_mS!goD&NxWrZ^aU-wC4_Ca~m8$2Tq{hxOHp0CfJ}!jHiv9aA1#FYEnyCCQ=H5G~$#7p6je^7mh=6p0 zA|fCi1Zfdz0z#xKU5Yg6y+%NK2LVAL^de0vqzW5MG~mvc-pt_IlTG8Z6 z6G#$!vbSB)#)(T0YfY{&`nk}zzUjKLnADeH+jVZo>VdRK%V+ep;gRFIPddT~S3)R% z-NptrG|$Gt^c~Z!eVwk=jM|yLvL$ET{$6dIxf+`Mk9AUnQ6E@cDq{Y#su> zk$~~r;I3wS8_m5&!XYhTYX?<&AYh4Hcyh(^;nZv^KnZ^-aE&l3-*msTys9G#j75jg zS6Vync+RnIH9BriPxS+w6>9VG-Nus9YYVLuHLTUF2}$6-~sjT6=U3FW_BSGxd--ge}L}Aqud(^h>hH(1wtc8^FSo9S72l4KfjJtQHe%&;G+bgdd;2C=i4bj2(^1uT0 zHL;mDOs#X2fcQEnJTThtdTs(@a$#MU}Dhe*W{Se zSDxp|`=YD|Ma>^xpQd(yJUt`Yu0;z*E)&P?@+max{H(X!{ouOgx+YVz_H0ad!CYm0Zg1l?B&vn&%*5YMl9wAqU}Pc9_d zdOY8@H9et)1nIu7*Q3q7NKKDnc?))nknnZzz|xn0bs4$N zU8^`|`iqtDRtlb411EYurLIkAXxeFd4+AnFaN9g1B81eWR-fqHH;T9PuEoicrgK^1-o_yn4YPdo<9VegU7AfNd!V9U*?Y! zXze5H#%y0s%OEOsuh`#_iWniVr?y!8ME0$Ii$}%7O85qxM-URBd+l9!(YeRgNUtv&XlJ)o7Z<<8((OMjxJm<`+uKqT{hr2F_5Gd zE;5JM)~FGx;QexEC#Ba0GC94%|Gv`G7}UZKdr!ORaJ25=iE-tnG@fbg;pW8$1IhPx z9o=oCZC7^Tv%=y`3Ca{S!v9=L`u9Y=CinY(0xm`l*AMPQhh3DulN!j>4z%UgtCdeP zY`siFJS$1Y}WaDPF8dS}UeHuTke@X7yrRaRHzorNX?H%qZXVJ=Om` z6JnHKQ0m;sE~D~oWK-$e=jHlQOn+;a@u0Ps9$l49Ig(CcAF?ZwN&San%fLPWCrusS zooC$*5X}~MGuONA`l^*Xm?6n8My`?^**;>}S!WE>yue}yqQgg)MK3IEN8R8n&L@9G zeo9OCwjcjE>NJ!Kpsj5{O9_qlo^6b{tmHEF)pqzXhPTNSTHSs>xZ7ljAb27GvBXJh z449G?&DX7v-#xLC^W8!g-bDR-jMHDGxjI3m%l?IY3?6&Z(4%&o~rZ+?s?2N=U!y?gofh>40xX zT!MJ^W?>nnPq6eG4Kz!TZSO*spGMGENCqC;2{S&z*@!x3x;0w?DB$VB?eL)OYrZ&L zCv2Qi#f|IU1gr(Zc3ZVLqU4hK>sv>b^szu-W%nuU#zjTu=Jk_eo?{IQZn5}$w#U0} zQcw5sjSUW)SpFj+?KynXkVa)bx1J- zx7h6}Tjdvkn=gAHyX{w%l*&Y%NgsDQLa+gjnpTu*evEZJ7SXN{a+Yn0^G913uBdA< zmfHcag!itl^im@&CPXnz`;bTY7JyT6$3%5yQsyls%{R8r=t=UKdT3psPvX+!?{DT+ zH`r%Pw^E6XMNU_J?Wu@4Ut0eTQThrXKkCqsnrL9nyaWkGWxV!S7@R9u65Au%+JDn9 zANWTyyCBivL9JuYMSd=H&dw-_^X~Np4{tOv~N+&pVqNzOIOzMNyiis zq5k$~AtYZHlQasiGdWcj$(=_-6W?~kM=5hhmb%{&J1&X2OE}e2E@p(;g|IWm#ljQK zUgkY}`^LDirN6{x28eBYI8CYE2zVcQF!_=7oc>1mkQ!yHLQj2NO=o)>IcI9Q!!RU9JRBnCw z$oeOrCcW6}$D07qxCGsasgkiM2!s%z=6z$l+k~8yGMZr@EPQQFnDpkYSSb9x>|Msg*M}kJ;m!#K7*8{H z0BYDAb%mxwS=&j%CMUhhM#{}WRU`I7dL6e&TP8}qxT4iMe7*dHk`5%-Qk--9attOb zm2bv%5$$CVOfu_D3((~T!BDG;HuY~#ukjr?F+VMn-6eTtZnqKOIj~+|ha3;Mu;UlQ zZ>sn-t2R5D8Ijye9Z+9^XBm~9eU7vfJ%JQZWp$IgXYpS%q7icmsb^)m3UA<(%1R-` zSQG?&hnAnb+}9+dWN${+KyTg_^o`dOcsb(YCh%gpsQueFU$K~yYnx|;=EbvfqS=O| zvDBHjA~jFS^`rgX4ZguE{PC+c+*ioK1P{Nielg~hSQmqa_0*q$p}7V&Uosm)G$u&W z3hzhnfMuP}LPj88d^tsn(}wn>>sb0JMDE#+Fbl~0(wZJn5hujgp1?8CR6d-F)v2WQ zrZ6f=&+Co{=S<8{g^J5r#%4N0_=2@)Fx)8utkL<@BC>kkgC3C*-NB~%A7|*qK=(??Y<*V;>oKzpsP## zIMcZXJWwgH%v|mLV${whN}i#cee#J#B+y>~Oxti8EA6T1)F#$J(`j4&_L*D#ldF3e zN{#Yqp>n=;qr3C{{kT3>37~l7Q-cgokdKiC!shX$Wc>yw^SqJLFI24%QTTtnTF|lBI7FGcdNHuQOvRl>>09y%}LtMSC-{E zqQbRASpvgF_;R&1b9*T*+UZF<0)hHAR8QS3V_;6G7hmyf58-)?HFmxYsf6)<8>j8k z^#kerN8}8ceFe3CAXFOD$2M*|zi6j>iMEs<-FTR&1iyuo2=@+UrJnJS(f(_4UF`LG zrTfy^Mx5DpWd}pQxbb=+P-dhr$U;d+KDs$aA3gPLOvh4dS<eYf%@cr{rm5gUrb+!bd}| zv~-rv|JH4<$$SUsI%^H6Z4Jn=6`;UP$qW;&syI@u`W9c`d~ChuVvSTso@43#9t_%5 zNh;|nSGQ&^hA1$7@uvT?VHlFFFSD$2U&vN&RM^`U`mWxzJNlp+a9~tS&UO={)&I&k zuEei@(wlHRp30E|$`h!85%uQSj!H3-3^`p@lo0fOi#Q~kXhMg|Lnt%ac`l?djlT4A zeO%d66xs6gQM0N#4gVtrmWv8@pw|Rb_F{i$wK@D)bN@8=K`u^)z;;IF4b1-nzFZ+A z#ic?Q^|qzimU&S%6>$SYuZ9{QCIew8z*}5Q{)|b^J^juocXiYgjKy2uH~_uAsFQq` z@B>S~a1`$1BxFaYNbG)`H`*I9{Qr@RU0y!Tm(=Euyq(SofPgZ5YDF{pR; zTvSE26RTaHBv)+yeUy;os|`(;oLox#_Nm)bWZzHsE;?!LgUv50?xUrPIgeqa`t3`z z*D>B|adJ3N6GD(#75vz@D6p|Qsc%!yJG95Ct^KWD0c-Wc-g2t=>VJNf*3UI-h8i0- zgkTl2fSOpq+NdzH7N7E`N|M1a97^ZmVB_|kMyv95a{1$~I0XeF91!&|XBnIS}6_Jp3n+Z*jQmMUWE5;a>HKP3o11;e;_8KI+Ibf+;-PerXaUv0z9Yd1Ph3= zw2&4fTZCTy4sCVAkZharmuWDy#f6R9B?z(Ae1WkM-;h_~qNeNOW_Zd933E|cGpUah@%}+rsj9k$&WHhs8!s|uR%o^$#o|V7(BO3-7i6s3v@sX+ygpPdBSCC z1$Vqc>}jWIFexbBzw}&|Do?f0bAtY5$8Lyx82~FIUyDe13QG64dt9Flh`;QWN{d zykA~susIILX>&a&xX3-n@W+K@|8B$y=tO}aUu4aGAtPJeIGX}ETL#zG>5jbd58QY7iO8t-m6Ix`6UaBmCT<6YwPuv_zH zuvLBXbw`|{FUQo!;EGghtY4xo!2(%THO6AXlW898B(@821ON_aTP?-3k>2KjENS9C zhvPjl=4iwPA9ld9Y7nlReNI`@SXXZ=sV8PvknUQ9I5)#1FL3!=THUax-x%LZ>L~i$ zg*{^NV4qcm6RG2)LhA-!`G0}uY#grdIesHASl{HJKbb74?#!NjKw;}mL3`WF?1FE3 zvx+*u8{0hF+~YmdYVS!_9F_)EC*dkc7S)FOz@Jk0*-SZaAV2?rq<|meQ^+~tysHNE zdabseQlE$5ZIxO*Nsz4?_6!Q#pd2a>L!Ur#j`?H6ZNX?yNP95z(v}d9t#FnsF~o%j7iNqszU?qGcGkI9LL|1p>PBMKdE> z-`1XD0(E?$DFf)v)a!46o&@`~Vf%%j)lLa7T1G=mWn@~%R(vWjfK_EpJN~JHnXzVJ z3%DT9t@Nz@DW6BkKX~VtuOp@OE{vZ6lvI;sl!Hfyg3JrE@vIG{Sup`+tGPL|q(_|S z7QiJCAVy*6UnmEls;47QM&%pde>8X@dNcs1J)>Ti$+fZ+tL}>`Z1pr-HIH2J;sbc~ z%&h&B&-OPFx8`v@XX?OUWY8b!^3_(pMM5!~XIe3u$C&7=C$K>NQgOhOJ+7xNK&n?h ztW8+}s$(aaUYeVWvP6H<$(V1Yi8^L2n0}Dv*9)qTlE00HMv|>HtT$I%qQy!&q6%BQ zt*6aH|K*UpH*mbz`t(*X&Wfx4ASuPZaH1?s2ml_kUzXM=#^!+A;a|!UAS%Qv2C&X= zH-DZ%i1&yKAAZmp3AheuI9{YvywO#Z-gkq>i!~@SEbBylbfU8~_gL?33 zp9-KJNM8TPRid?D`y~A1CR^0q58YBJ-RnRalxCYk!i0o?gVu@Ghq?wB;=Je=U!uST znc{JV5xHD`lHFcfxG7g0jdlg?T39U?QM50ms5!JMZpq;O)w=uk3q&L$giFxC zIKtN^Yu~VGin*}K*t{aer|1hzK?b$PAv{XIxCsO=5Vvp;=k#|0a*s$|r9}6!8zSX1 zZzy;Y-6XoLbmF3O0axyuVbwKZE2M^_*;w*jy;t$SS0BpX{_7(d7>6%CHa&0;k#DvP zMG47na@GVNni~K(9lDG8hshE!Uf{Hw;G7QlwR`jU`xi(^wX%}QWC?g3|V{wicy57b4X zDNCxcrPu!W00IvEKKvD=BWs*Ho}uw{t7gjlt{h5EvKesTJ~~oCmUpZZ^?fqMga9r( zKTQUCp53nu8GI@EKO7V5U(kGeH=am%Q(Qs+%)yBkGKL_IBHnmtK^92|tJ~0Jz8|DA zWblIj+Mh5TB3en*Iu3oWB4`YqV4&t~Z&APl_hm*wcgi50?-N=-u%&ym_f6MDnnLCn zV^)>(O!kx;DvfW4N)6JK0=Ip?xchDD)aJ8f@oeK(@KB0ME}K*g*39na%a#y8%JG^Q ze_mHUyhq|Ly^zSzfA zt14lOPG#=GIgu}BWe5Evn{~T1sLj|V5;hVKI;SPj<)rt29dkeZ&P+}hIh+^HMG?3YpmxAM18d0vK77G~p{?PxyiQw9D^V+z05>hO>z zhjPC-&-hfYZ+e#D9EWZdHfC#ZSF!nKrJHr*J|He6sk=#>fdR{;be0>TY46Z4P`ytf zcwIKF)=>9e`jGS`h?_(}%P)J4`B>5WNu2K14>)SI@J;FR^4d1-1x2iH`+b_bx}f#$ z(PQUy8224$=`dEaOtOLI^`=^TnxMJ{(+G=02~OsymAoS${v2+UJ~8IXnl_T>yye@ zDI?SAwY>xh&;zlGFORdrLI3{q`Sn%x@nYOr*B;L{dO<$&)< zlae^BPUiH^L2ZcK&pX09V$j*7Eyp`MyMU0orQ=d`5hXxiC{nx))cPbgqb7zd(XFGJ zv$@5Ft2*k%(zJQw&dcJreDz>4ZO9k?w|i?2S@>7FXYiyBE5^&2REA3>azlx=N4)>E z6SR0*+*i!{5F-Nw+gzpihq+z3XmN5`S@=}bnoVlpt9bVeN9usnQCukTv7(8WaZ7jm z>LT&;ON^@|sxCA2b>Y1<&KLy@bj$fGE8R}Gv;lc!gVYprX6To0Q?c`;VKSLaLRS6a zP~c6VvP)G!q~ZQQOdhX1lPY`?e$Ry6Ie{1{)i3*AWqRsiUsbtgB@*b{5E$E3;M?w0 zJ>|iwQ`ZnD7zXfWSsAQFr~vLpm6|AiE<0YTke9WqT6_t_R1yo_s{frz zVk7f**kZ_)D?+@A>&X+X<~DEo4Buuk_h;rbH$=NLhcLWt>optgBbVvKBir|kAx5vT;cF=UanFU>7xOwp^R4vRAHp?|eQp42J&d-J zBtvp*$CM}Gq224}-{?-WN;k1S*!P)|xl>fB?3}-1#?jVsRDV+zRejmN2>0pbmZ#^+ zzUI!xaIUcqgE386nFskHKq2H#SY(YxjKI{p!GQ~G`1Dlw4 zF3{VYa%rL)dw7c&<@zlo@OI-zso;7hQ`Nemz5FUO)H=~ROfypZbt@93Tb|yf&TBIA1y6Hi3$|+ z9`smJBNfDN>^J`hb>bxt`}vh8e91B6bl)d>^Nsp#T!J2j{rSPlh>fuhn9~W?@|Y;% zAf_1kCx97lPp6GBtO0FmTi@-~aLJg;bBkC)(0_?(yso9^<4HRWh zgNh#(i%fM&{0!|{95}&!w`aCg&bD5eipTo?3ERnGx|!~XuwJ7HGz?qpFrxNQT9*A5 zSnwuLGJ(0cxh;`b!5JBNI^bdmJhU~>$(&v(*~e|vEP;^}Ln(n9TJ`PamE>5r&;tuW zUCIa1tK@SK|CZtlhF~CZX^G7y!H%SA4OTWr8y21EdlfFk{6Q4!`bM7*dWJPwcJAiK z5g79Gg(in@II$`9~=(V>$zU`Qo&9B^4Yo;a`D* zh19^%PQKeDqEBRMu+1p z*{Pf~>?UsZr7dJVA9zZj3(o#9=05yP5GMwL5nLfR0THBA;5z3T{jrNZ+O+iU+$SZ!B0oI!P@PBn5Y* zv*6fQ&`;4X^Gb?4esvsOZbKut!Fr{f}&l z=v>a_dv#ttY!7f642&1t6pOJgD$CkT;@`US(Tx4iPa=%j_QbLM8t1gWig1-~TK&7i zjT{Bh>F$gLe&%_Xk+O&P+)WNBqGJj(qhBTy-ikP$Xaq=BKF_5ZMVw6HYJgo&UODTE zjUgU=El{>+@1Y8)AdAkAZQbOO81NhdBL1OP94c(YLH`a&0FCCKUxNW1s9Xp438w<| z>5t9#ZuP<~xwWz5OZ{O<4Ba_e_0Op-TtS}J4j|DoC44x1g?-5$ds;)VH&nZjzXWyZ zA1L5`*$Lsgpaq`lh^+#8y4_NwUno;wP->5 zouEq)s)#e`qf`t&_JpCkIaEa1(bbugN%Bihf_UU!hl66N{V9+ch_5Y#k2ls5K8{vj zFaVeG0(jT_aE7Dbm&0wK=UiUNc<*UAn)Ep{hvL6%!;@XY>m@A*a%H|TuJfufeh%Y_ zG?+Tq;b;ED94XnZa}XSWWiA*jy1{J*ctEpr;?jeE$QU0OoCW8?sLjX9q z>u}5cxyl1OS)-QTbapkDAYR0p0~HbQGiRdd{)g&?I`W*qPFW5)1vQ<7#v*rdtgd8@ z+0bBDnn`wEQ*lT=``L|S;STG2&TrnWbm? za=^?>QVHCXu-y32JrlKr2dA;*M{~fs!Fw9+_Rn>rzp!)KGsm1I)`~NlI|c3b1X$n~ z%2R4>YABLw zN>0`jjXSk*WaY|R$HH7PHAcWX*favCa`=4gR7~q2z4KCzom$~u&#}VvatxUrKvYxi zJmvjLNPht72|pTFzd;RuKFU6L@{-r~O>x}Q=i9A+H7k2YE4Q?fU7_7m5@cXV1((Q-KdYvVobICm2sDeUtd{C zmU#Dk3i{-2^&TkO1qYI5SCiH@TqN5u}#?E4dynXbxQlCR6lP^Jhz_~riA+QN0 zMed|x+o6_CY|UuEAi2z`=c!AlEo)Nzi5l2+W80efIGgd{)spH|_Mj_zxPzIVezp!W zRb$QC80CdLO`u*k(_a513=j;4T(P&F`zbDOqrJi#muGKEK0OsL5nmtL)9I^q>;#?Y zU#RPfGga%#CbXl-MPMo4! zxAYBjErf%BV$JL7Z@y&5yx?FT*l24JDw46l2o#hi|C%~G51q1`m0QC=!-{f%g{!}yJ`bI zx)Q|>vj`*svS{eDsTCfpP`(uZ9+PS%Eb7B+e@Hi+Yl)`MnUXKE_5J|&ycLWp*o9KO z?TB^Mbe0E8w#UNx7M}xoM?a_1=&fI=-+fjM?g`!bDLZg+p#PH9~Vgf_#2@`qU zX~~r+8ClliQ~en2NCX<5#)iWB#U_~1?KCM$D#336Qn|2(V#8CNutx$2*YS%#Ug4EJ zLjtvbA;t#)cSL^wCIF}wFk(MVyvfMhxx~obppPEYqcGTh-sTv>w82~k`KYyHeomuP z*o_zS1r21wmipI>H0U;=L^w2Y={IpuUv}p59?U$R>={2Lo>XU$XKW1bGx+5pvwrp{ z>>RvbP!-YtV=gC1M&9o&)g|aIbM|4r^(ow>$#Nt(6o>wWUzH@i(wmh!dwZ0dG-~^Y z$bA_2;@2VhYWTn?Y`Uu3=Afr2l>J#hi%$tAa!8+ihm@KJEI4Jt0bJlMKPHZJNZPB4 zH#1T!NF#s`F2Ql1FZc;jXC)ZW;;%G~lJ@JC;mt?#(!e$IS47 zr>nVcR9zgBXMV= zLxf?r*!E)0y~>H(4*n0ZyM^HdPW` z#MzkY=m5xA0DXbS~V#ITt28 z5-(#_s&|Jc$G877I_EUx9JYP1>HIwT$4qyzjsPZN`M#&#*%| ze0ngR6t2Kr>zi!VDKWF~Md$?wcIf?7A6}n>&^}7}Ljn|@`2+JxMC zEAmMHEvoQ&PikKJ^ZIj77e+3KzVGmHG4M5i`+I{d-{h+;PleJI!gtsbZ1eH6t>HEO z?)=qD5Yc<*wfMwfQa13N|HFncS5BbY8i30cN(mpYu08TPjF}Q4D6NM>w>F^1>f=R( zcIYAHfe7AP4=z&n7@rMaDfP%EGy(WfjvM6Z`|qIB|EJ$+EJfuy6y$!{2hnAa4Cw&t z%5~l_2j~)F?BEh)d=C8`gOQd1REie_U>XSk{{8Wp7bl@8cWy&Oe*Se;eRaz7N8+K8 zAFk|G9ffCk4P5;%uKUU{@3#FVi0$SUp{4f{l$qLr2kzub$)?fCp6w+lL-+#$Fd84e zE^XdsoX64?+fVfql;&~)%y&AEC3+1G8~hiDqduhe{Fe3y9&=zDK5tLDhf#q=94*9J zx(*rED&pA<2T=`PyD{Wp#hP3-51PWjGYOTxqz;k%?XJuuW6Q&?BsEP}s=C_`?KH6f zBtn(tzCN%E$1+z6XEP1%A3!Z+&R!NOn7e#OO)IPeuL|%{eK?o>Z`~CnSsC?+hetV( z?@+vRLh@rnPB4iQFitXuXf3CaNlG1x_exZyYHgm69l8=pe3n|O*Dx3l*j*TN>1yCF z6xI5YT=AD&;ZU&8EEQL)O6oY&v-!;5OG)Lr74TR={=to0Z3bvdVo~A#)1UWJyxD3p zBzgr7e7=6^f8}OhP^ziX@~fAWcBo)OIgP=OZvY`Znoc@rMn)X_2TV?fmV0;enES?f zdlQ}SJ-5DmliOpeUP!WXKxwyLcpsG&n|&3K8TeYj0|P(lm#pNuHA8?*K+)~Jc2@$? zSVnD*oO&Tj(zl?xXG1HIgF|-wKq}&CP?3r`v`-_^$5<>q zl8d?V?r2D4!$VuTS{pIlCBtHz_fGoXp$jI@F%~1P7u$ zOQ(N{mHaHml6`m1H`=F*p-{#>;R>ZXG0C}O2^dK@k-+vvA)!J=Q4Csj6-aPTSou%d z8F5HQrK+44+nj{y;(e!VzuMe9Hmxlo$Q(BOsDoB&=j^n>1U@jC7!;6!(t*}buAx(nifLE0 zij7dxaL$iL6uKC?`UdK@P)_Mm#iZ1{vI zP2{yvWly8O1j*@fF5AfXEulRnZ{?$1r-!DjjgPqW+UX^bkIJ1*Mc#b9IX`EJIwWYt zi+=^fx(&0R>CP+;E7@LJ}P}sHO{Rb9KeyN zz%VSm>8M=it?8m>T<@)jyjN@8C-S1zEMhaH3`3ww&CRTA@IYp)G5~-B@+Y%CKv{8) zL&qkw_2!T^eQ-h*;y8joE}>gt{*X{bpX;)8CX)r7q8CR+&ghbMZ4RD6LUc3pW~&po zogep!niCGwvk&to^c!<$oF8{-3}3X?;pE8n z4j9|xJF;iFD?102PvpLh1P1F35Ofk% zL~XbcEJP3ISi0I-SVVkYn|^Jb$L+xqL8R778Ya$2KsQzx6*|y z4E?*MAOZ$GABtL4%n_L`<`Ei$Hb5H#@e9u&p}lgM`tk{iHZG3#E=_vrQW}%ZH;b2i z1=U;rz=#NdzR3yh{f_90w;V@IVgp|O`n>wkNK1l(;LCxmMob9PJ z^AnUu@9N*#?>gdD4Ix(N+}yOc$R;!r5ApN{XA>_Ivj)hEMTZ>sDlgpv@-4$z@FMOe z!ANtxINXNog=|&RBQo2Zt8YRj)#{6M7R!!ri8tx$IoYm0+ZlzXLvNZLUQ`6mT66Ey z%rREifdzCSm0hU)bWOkt1iOu#VTckixjLIi6?bOFSV(Z0zb)3!){(~Y$539=*}uUl z|A@9Y$BMhuUmYOw#xuc}pb}|S-H!Y&VAV(xI%bHoC={Z}{6raOFLpdd4*zwe?Xo14 z_I?@GL|6Ug%OfoO7I{ASsK5tC|Fy1c36IOLVNVU1$tK`&c>)79`J713Pl6}MSq1IL8eHD~J=C0f#iJNp;;PXN} zshnV%vV8FA(+7vB59+a=9Ei9}5E&v!_b1Xke%Pq;m%BaB>Xqdl6f3$_=w8Vo9=af) z$P?b!)NDm7-k&V(4Z@++B#q% zQK8X@xt(EQot}+feU` zBOx+@Xy5Cntf~11`ukF4c@i4DIF+h>%|fV9Y?)g0Dm>Atn9ov_OJmhtkDr6X1Er*N z`^Epp{Q1`uN?v#gGC`c*zx?&}#dG2FNqK}0$f4*K_WgM)h*G}`%!J4 znBI%S#5Z5=QdvN9eU6^Ie+pVoB*jpq;)M@tabehbyr&8PQs{Ag0Gs~?ancJtrg(mb zUg=-<#HscX0ifJV=vIyqR+x*k%7spyNuDMypunSxec)vd;o|^!1K*4dJ%_r$IX%&y z!s`P#BNR=CZl89G;qJsxQAfU$tMD?FOzPJ7pb=3T?)R7*vyczeI ztLy?SLI}2DIIa8_(rM(%lFNVkEElOKI#Y@k2B^%St*{`}2t+3Hr3%Y%V=X6`lv zBaVu-hrP~MxzU|HTLMlcUR>Y|yvZTt@@}(0X$WJu<`S;CFw9kUKu931-quY|7tGt_ zT9@%ZQ(XN_cvdPqtcnf?tRQt2dO!i2`pcBKkzj3L15>n|yCG+kgz_TVN5=Z2L2D@Q z0IOvqM171+{4D$%p2BQb7l9~sIf}Ft`dK+EmDWlQ8cfn#OIn+Ow@D#_~ z);8)gGG|$igUgbn?-15jUsTDyeKSXLZ@5=(j1SCC)pTV!bk2R!F<35oEX*Koe|IDF zTJ?IjQy}5(E3rtxHd0|zxldAbBYs(SltIibOQJ%L@U{#0MDjwjX1Rv1)-%yb{eEm1N3`;_T~>@)ALD_4@U#h z%LkZ`_n`=8U zCCbAZMdWPiJfDy|07@lZYTF8kNM~RXxG)n zD|J6iCqpy~0c~!;x|j*P*$7`CSRm3ryPXyCm{>lFe@0crMa{}|eUnoxJ1Q?NWef)$ zdsja4uzZ9B{}<}a+(!!zHsAbnpdG~%Qatlkxl{g};iA)1<6Qg2H~M3483Jb+5z4E% zVbta0gRev>4(#8ga5{4P}Jqwy%CLgp68BmdVaHh*rU zs(D7=e>5AQ^~L;L*YjBxPD}F_*M6kFN0u8HPt1{5&TzR*d4TtUY2zMxFUzLZ4R&Vw zA@fA06VIs~jWUPN4QnM`K$CGq_o^j?zjtTb+^Zc(K(gO{PGI{>_h^29$x1cZeM3}H z(M1d(De3jKQ;~*~&ZY(IQzk6?K+(dwzONT^G<@;lKJ{Fx>ekLSlO-V%*kNl&2589;P1s+EdSWk*4*t~6m;sw-Y zKLn!X?$>0UC-t}%AL`C3JdrKRCZTrLt$jW?JAIXVSK1XaBRRfLsM@h+`<#mdUAGfZ z@{fv^+9xzCxy3w~K|M<2diVZ3%S38BFn_%hR{-Junn#eSTE=JRb(yRSwx`&huK+9* zoX0vk+3kb9y1tzea%=MQzQU?ncCWb`lQUzv2y+{KbIGrm)%oeicV?Wc;6yPERoA9< z^s<;t2Hwt5k^?Aho)QZzFu>}m*UYLul-)pQ6XEaxF;cc)PmoW50gna9=d(FGl9|<> zLD~>8YFaK4E#_{wvt54%#Ft7PGB+pd$_x=;SX{R*YeXm8&?CQ9{G*| zb;%Ev(J#Drb_Wp+%^^m8*#qwttg5yGL+yeGP#8wv4%`M=w|P~wz{{A^q=12wy7HcI z!T3Su?0wNZ59^n6p2h4RdbojkeN(&Y!tzf>x2fL^^-39bm^?|9kJ?>)z1@Pov^#Bz1K$-%g*8&B z5v+Pz&pOUOC3y1V&f~4~liX_P6fZw<5;gEN4&F^ z{m#mdk@x=o2Yd4RV^PiVc*w}Z>M~0s^+-hDu>H7K5!$A-Ha}oqQ?iCKoxGCstEbGL)#(D-D zVTRI^n(o$84{N?1UVLJAd~2wP&&jr%yq@pu_?=2%&q!6aO|StBM%*SC?9p_OsGQEM<1n#4r9&|2w18yeMU1# zX0KoBCFnQnVm}sS1;v0NfSh8)i~E4_bX+QnPMU%QKjAJ}CiDd>zEb-XPCYXj_uGF5 zrSTl{6h+jj`S_yk%BEjn^P<7i#C>4)!e(%rW>_a=h|bik0`{z?awB^mA!gLF`jV88wT$tN*ZS_zv}@9|5`p8AXrjZuH_T6sTN58r%$Sb2LZalt z@sya5{ja~9o|Y%_x?pzfWBBK$SQOP7RYmPl!oW>z=e=qzb@f1EN;`*$sp*3t%Q<^w zJW-757uIr;kD^F@weZ<}c(5>(ddqD}JHq-*#JPr==419xegZX9FUaKK2cW#bK`i~F zFU-2xG~39Ci$Pp3A}XIYfF=PN9>BE&34vBN2jif(MWi06l~^kWPo2MEl?n$67Z=`^ znGYX#Gd-oahp@7@xwG()pObvxHF#YszZFI^3o_XsD|Ox?nO|3%#fcr5SIH~-h!lN~ z&ff;s4^I3;lq76jF~<3P0K9r~8s}+pXLh>ximCs)?BLOf@ijFUvyKIMFXoQs*C*Uu zu+jVc*4o@wXF{1d!N?u?AskzEQG1 zQ^Sm`2(DNFbzV;nfupbF z01t{0j#F`Jrj`)Q)B~ObPM)=$F8N)i4FJUp)Wh!Yw7wH z-N8@en%TgRD6g|$_JKN5lJzl~BatXI@7F(KY~H-=4qSU_|Zz6HaRVo8=beiUr7<46d}CqWiS5a;UT99}S^?G*p2Z*4 z0aFwfM8v^-5%DllBI>ApNQbU_5bo_=kAS|RJ-LQ95iZB8U8~FyoGXseArlGDnN2J4 zxj6JBVF*v-mj4V$467-yu9q4-n5;{wkL`V05 zAY|V70HT_=m1=+NN7MbG`{7IsuM=!g^v2RsVvfJGiO|>2$`C-$-AM-M_Au~BlaI>Y zt7baHd$?D%%?sG_r9(2m6 zFD}+U{rU+t)`}N6KPuS6ROaZoj3+%~jv&w`tlNkb=XsExwiH8ErF$(XH$BF*iNXE> zbxhwnDXa1Al}PgZMv&)U=O^UFzvJq)`~N-B5AsO+uha?7lbl?tEAt+b!$$k~_26~X z6iDRWtJ!a^MjdrlOCIKyE7uGZZ(m0%SR-CGB?GCh-I9soA9b!!)%hq_BZ?0usWt{q zE%1R8p(8S}hs|x0l^T`eX83Aqp7P;UU@BuRQ*sbBw&L$)5msPEWppTnH&DG^Q_)k< zkFJj=!gZEj2`1y$^CKTa$c}UGqWA-Aw6>6ftv9Qecj$!Dta@vo>JaVR+ZLm;Yejni z1x!U3n@VL`z+N6`=V$q>)W*_#spi~jsPg$O>!!#1k@UZPrjov8-TDRQK>$4aP#p;| zBlGAm2K*M-5=*O&q1Y}Y&LJPkEQry9()^uElJ7c?$6! zaqIgrNs@3(@r$XsJBqg{e)&XopA;I}c&t3A2`^~@mt**nIX4pgdD07v=8bBnU%Kr0 zcWSK!dKcNOM|?FNp2NsihVMVd$e9Hi?%YOqf=_HIe8E?Cx{U4cDSdwt;!Nkz zq{UL`6viJBzEaM;R$CuSJ(TmI(?H=nfk&ZnREdgqsi8PzfMPfIh@o20@ip6LLLgG% z!404LPF%_PyaWN&GeetzNhtZNm;6PfyH@7zBxV1pG(f?7+RT2kzt(aKIJZ9}O_8EM5UId6wAG~rmxi&!(xuUE%i}z(tiun_PlOIZwlf*+#@qWy<+nuQ@OSAMg+Ah`?g(FbZB(h=&YPqA&Avn4 zIYpxV4|GpvUPuV=Oy6A!9}0xq*oHh5aJ9S5Mpx}Wd9-^uS_T>u?5uy`pEq?qX*@2g zZh552;ecjjnXV5sH9xkY%g;q4%d|o5b>6X_T3b%5D_jjJsqW7iH&2G;C;W~w{QJo?=xBRru z%lh@Ur#IP-Nq0CVr^c$!Ta6Jm?+EIh*0B^b_@I#h#IQ8`m0(b^v@ce)DBO?$*K7DW7X`PrI=a;Fb)M?f}R!% z&FTY@G>+QX*mb|DBdJ4)@-e#cFxR5(YYrPH11^}?$DR-kpgB|Uqn9I3g1~kD)FVEL z$H5sWhIop;^rqn*M0uNMaU>M>QS-wqcShPY@zr&B=Kb10J42?KPlh``sTteWKVjEV zQHV(05gz$;zhmR#H{`*0wtV&>V+`KrBgv<0)F{Fg(lU;Iv!J#gIL$yuzo%;E*s>$REPOWb%80g%aAQYD)bk!@5XyJy*mzw0ASsy_{X`O%#Xjeq=ci#0Vy+^F=!!7K zwvM~AXY?8SEu+rWqy3H8ECxs<5z{e+Ui)O2bzynh&ANChD~5tOaL*Es!W7mRr#hCM zs<-+6L@!@0tHe8M;PJTu0q6$ZP4n-AeRI*fG9q@I%HG@90G3&K8rBxc(!oKy#rn^l zHiNQPckPUx2>QR;R6{(isK?H|JL3#k3*P=-;2}8^_1-ps-#Qpe19u%KUGH92mJ%{0 zg+A$R9Bqq|!EQy%UjBicaa9*Sb}i!frr4{Snug99uQ%_X^uTTag#`~$$LXcq@!S#u zTOxf-jqj&RmFdh)w$Ge5)dy2eWet8DG=IDHRMLcZ*}3ibO6x#>$4A>ImJFL|RpWF6 z{WJJo+>R(=P+sEV(QaM8YbUMY$Ut*=xAy4Jl8Avhy&iTQC*R;nC3A6#`0)TnFfUN@L&EG_bi_;0%;8%4Y|X1p?(HRvri-&}jJUIbr;W zmS{&-IQxGmUHE^8lB6FG1BkBlw({HHSIi86@u8d#kOI(PcK`dwL5Hf^AJwWt)$0-A zGtABP&!Y@}L>?5U7QtLZ==|-b%XzVxe$K8-(V$-8!sI(XBFh8RcYH9qEV|wv+6CC;K(rYy|@O)lLoYv87cCPow?RrBBi!JIv z>hd67UaQ82SX*XKFZ0f+_0MU0KCyP9uU;}9nztRf4Kj@3p*}yo&yWD%k}BRXCke%) zvbKc*=1F0G$rJ@lq7J%2@+jvHTCYU?I+s6B*Q|OY;_U?0Ad+TYxCpeAk^kYZz zJhG;E-gL)JqHdC$nl&bxWl&ubv<1o_tuKMtkcLirxk`K3?*ELemh3F~@a4k%354cc zT)cqS(Y&EL`RV?;`f)!kp`O;zTd{CV-95!mUKQP;2ARoF;B9ak^g67Sa=dfuf8 zPWuVJo^gm9>&<$JW{~FXcEjy>Z?~6W1e(SO?3@Lo&kE+wPk{Q~tj(ctp@R7Wi(BRYnANAzXcuD9U!I~8FYpGb5C z`W{Ms{*H<>C7Gf1b}k*5a%N&T#fPxFrVr7e)%uYiFTHH7uQ$8x$UKU)&_JpMf{1)T zNYrX8D@JCx6>L-NUn1UI8C#3|w$#f<@0u299qUce4w!-zF;al+AyWA_2oH`rKXu+G zT}6{Jcn|Zs+kea-HLF&5WT5qGg87T+#p+20sT`m%wo6r?uOF=@mg4e&@XoyQwD=A3 zJ2sLc#TKkIHb;T)*%UkCJro-F`u;8HA%&9yO0QQ)@D}>JI+Q3awZ#Viobt!PZL}!Q zK8s@Mrd%w?-8KH0PjYJVK9gT@gSPJJM1K6dF(VpIE_7ylbDp@*-8DXvAio5(x%cZy z*fHzJ751#D$*rRo6ejem)SCW15B;y(`*B}hEyM0y;>!ZHzhkQNsrBKqbmB=&Lla5+ z1p>=3AXRV@K!00|t>Pr@*>|O?@lX$rW>*%1j`4LGDu$Vw4IEd<8`2~JmNxv%?(#PX z$;W)zt>4RrW7(d>o|>AeUsu&cN{Xm9wtVIbUts<6dMNz5fO zvWeOovn!621lXjk#q(tVv=KcX7>hd>Is{i7ViG8U3;!l0735ztQz2oS4f){5UAWCR zuvW81O!_5apQwD>$X)$9@dM@RVZjtt5!Lr*RW*_3VfS5%uA4jt^*$su8DB%t2XMC^ zA-_B9QF2B4tl#dY{hD)g^r!1$8tA}&)%m`k%rS6nCOhgGwAT0Es~X^-Lf)!x%OD-O zo-E?P{GoeD*#6XM69@fxh`s^FGSoyRkDrLzl(9vA@3BmihTB2KAg6Z=L6GvMv#q!G+( zy18$%{2vrv^IsI+mvZ9!c*qBPxyPb*p7`HU1N|-gjY;1U)heHhb-^x@>MD@sIb0`b zAQR`zQEdVFV@28bGc$Q7BZEe_EEYn8y>kg&ZGwR>^CG}Q+M=Q8>L`WggNV(vr(~Vz}RKCH%mwIh8o9(LBu*+n>hZTaTh`4t_ee`jU z)|7Eubak!vXHr$`Bac}o9*tYpgw;@)Kk0VS+juT1EftR!cXaVX*W}hwZsJEXJbgX> z{s_SlaP#I|^0q3s3xcZI*Adt${m`=G$uhdCBK`_sQUeZp7@Db25Dz#WYn(fV^KDPO z#TCDFj{o2??WZ;CrrxH6dLH6_*{|KCYoe4y`;d%#y%;<2a8%krBH!@v@UYlgCCc_U z(ZvBpg!=|(e=RZpe~QQcz9`iUSJIHa#npUd6zL^B*8KD-ZC^@?FjG!&0oZV92Nzn< zpSzPd`HfByKa>i&i_!!ffMeR5Zye47-alQn$#wUb=~G}D3Xf_6e?XG4=8_azey$wL zdO)`1QW9{2bsKQK%;e|NLb|zLUz&siR@+YHCB;4HK!GhF2w_WncMg8m+eJI_t`R73SAh=QA1}y(!RWzy zWpl_1VMoOicd3;o-Ve1gCb`icO2%$@+`p#IccKE!dux+7#3nPmDRm~QjbZIt*sHs9 zGjT%-Ez+p5epR(*E@arSzvsCq-q;YQ!EjbWOxGkq2vNnM`Z%4lY{{iZ3G0_~DE%#NOuw^IEwpq%e(UlqnEOzeO7Tfyh zeOSWBa`IhoBg!d)v&eI4!vU>~=i~ONb0(dS*V0 zyG3a6UJ-}nhr`mG>ZZh-AuM5iq8CKT<-x|?9lPvmRV0N@ecT?Ry304{X{jKkt_v^V zr{gw;#qWKj`m*06nMV#Hb7vIf*U)7R%kk&;u_nWgPOfCcPOE-uq&kr0(W3&M{k58U zZ%dFE9UTLgGOR1p49Wd-czu7c@E|>sPtN!?U-FB$8xKY|%q2z}S=kQie}fnjQaA-Q zZit)>k=2LMziNa)yrtw=zKyp`U-1^J0w5!Smr2R=0Ih0k`_{$H!{J(g_v6%* zqir3*lnQHi8flsbv@Dte4S(^U$&RCj#*c$!NgH>3_yN^e{!Z=N8JD3?6DN_!B1HhA z$Z%X-G|CiGHm#Va0Hp1BtF9O&AMm!GW8aRCZ5^A4ZdJs@Y2<)^R*`tbP8JXyMaA)>R{aSHc@4SLv^&W!K8*dw{xL$X>w8{aM|Y z+r-Dc*fU9D)soqq6y8$#hxNboz^>g3rn{G8GjDLC--L4!4T$3`#AA|O7ZpXTR%mkV9U;1{zYY}9xU%y`U2_m z@8r0&*9!?(*d(4ZPjsXxc3nn^k?i3RxTd`uNl4;@3@YA;HCX1=FmBR8roI;tBYH^M8y7kEzGc;%+#wAGjABiHtbJ2&Xz(On!w1Uy_Z)>C}mt z6fxI2bhthyzxLE5MF3u47FyQDa}R=5gE2HM>34MsfN%9j!e3Y zLq&H5&7gR7aL)r6!>sj%l&!9DWhMb!FW4Jy+LaS0mK2iErGg}`J{ydmhcIEb8woy& z4d%=VGc`O7>+R}=&O@S=LgnfKUA>Bz(hoL5YJduGKZ5fRgOZ)U?41RuB>gz39FR&C zHy0l}36lH@=+_FWmCN@AEF62dZgSt*@&$UsjqO@<9a$5KC6uOYKHqnp^Uwu{a9)Is zzlxpJ43k#w!F22FKV0tKl;P;(JN<|udL+ege49B?8PxY}hdB&^n!*(Br;~aICJ-74 z(_ITNc=>X4G5BiKIU1Q1T6%z*Gl+5I7-S)3hkwq0zBtoLZ*!u$@l~YEr<$z*Sc|9G z2+q!%6r*sptbJRCy+ju%of*%kUg>i>>yskX zOWfoL^QZ#h&K$L);sGQa(p`Yks&2MJ8QH!zGyeXCo8*ntK6rJ^cSzIg(q|u)O{+h; zHp-h*o02HoP7*=-O!7k!QK^SIFLEOe$#zHRHVZeQPe0X8y2e<5P=DjTISHJ`n#Its z{EI`E=8!Er-~Sd{40K~l<^MbL-#L6LANMSP6&S?qoi~83c(pSoVemeDas_WDvOK6v&52p6#QqRAlY&!N zC=4*2|#4fodWvWVt42ooekin;&>E*Sv1h528s{+V$FG`g7m_ARPCn3rx< z2@*?o@D(s8;0MKx9Z3!hqQttf z!K1*=R0v7z=Z~g>_pFw{rz9a~0;Xm|glv(BHP|F%x6c_1n%wZ%M0NZIl>r1)MmU!5 zFWDggC;lco1Q5i3$`19Kaova$Z6jPWGtOh_N6Y3v0Idwt+Cu8Lh0IGNin&ET?Vrz@ zx=owEiIWxpoO{9L}#!Ay+|oUKJ+XfGFIwa)cjUo*%J1uraq$cu>(J~!gmVb+v=A0 zCjM7z(K!33& z9h1Hgi3YCzUZXL@?!qiU4%&f^f!5r=p5mfvj=#1_p)DS?}>yEr^?HCnhaj;O%M+PZIEJUv+_Y7`-irnO~) z9utpOlFl8RGCtg7p9@dO7U#qvBdo`PMK^4$Em!yZ06m8o-8fySKd|7Z0JondJu0t$ zHHA4DN&^BCUAO~Xjjh{LRUg-k*EK@6^oktw2#!Ox;Q0DDrctoM1W$=2(Gvyjdvl(U z1f}7ry>fJ)Yw-y@A8_$#uZv2giI4aUaYhNW925GN%xMdI^g1$T8^DAA!Bkbhvnz)J zM=L?D=69y&J3UJE58sN@geMlPsdf9W0>Qk`MJ*+)0p>t1O;pRT)SsCL7YlwAZ7xhg|$r}JS^;54k+vuw9d`Heuj3k>Uq1bR? zww5`lJv!g@>Qz3-_hP1)Zr6Y@F0iv$4Zg{)NaLI92)MY^1GN)`Gfi!EcAX$U+S;G)UWVEo1kk*IdT}Fz+^2#y-(?+N zSmCb={TMIh-%;k;;(5s|!9(X36%tYwada-3D)(^AG40oZ(HrfOmU4xSFYE^=`*#+3p@@nI;9KTf7$WKDR~4339JB(P;S)PNT> z6QpL!cQ=8^C0p&KHBAN*_9D?it)q$LR)Hhq+Vsbt>qqlNxw{XhTsYxC*wEQrfJe9Y zy-uQby(IF==CH@Uw@B5!Aqk%8N3~4AV$J~a2qzS$*&5msnnqG8cnqdobloIQl~ujN z@8p<7G!Fdv*@bfsgg`@d+?n~mz7^L_6yddh9h*T=*hTtGJoubKs?aG$p-Lv$@yR@c zxKH$tY6;z|B>pY^@$9G-=CMb&2=ec-LtX=6P(iyo)y0U)IWoq?5IGJ;>!S3dLP6i0 z$h3t`oMb+&X>`-pVo=c}a?r~CsP`iN{7)|V#23|lL2=D$d*wux#0X3e_6rOEU0n~5 z<@tS!&1mFWROEa>=v9!iZJoyGKpxS|%j-*$Qyv^xIV&LHf{-9Y>l4&My1Wk%Rr)!z zR0E$+g~(5?eKCeK&59Bn1xD|+%2p9m?bYh_j zO$s^QJc`0Vs5ss)N!lG^#*(;oUp|!3Pk3`xBeT(*8Rg)d)8M6!ZFag^D<>eKgb;W# zW!_IhMq7CvLs)!70KqY8BG^KERD>PuQ1e2hBnE|rp5(E3HkfRw8VWWA330g;(d~V? z@82sK5Q?#N57XV5KAR1}vlP#K9k7;)z#l2zy7=fQ(CrFDk~<_o^UWnYK!gtkRKfdy(m*6b5?(bRrQ>k7D(uP z91>EMFv*je1l@Ka(xp#Ffq$fA572kO@{K9<*Tu6vx9Nb_92ydgyAa<~EW|6EB9@m( z`EZoPL=UsZ_zveKjGZAzbEbGK`VHg0Gh^2Za~W6#Oi|=s{ACwr<8Kn z`5C1_HMf-^WI?u_L!x9@>-t1kU*?hFy_uM2LR4UBHng8dXRnkGYf@n-|s{ zsiAfhy8n_Oqg?{}?HnU2NEo#baOQ-{E+oavXX)Z)CGx%Ay*APF0MjHN4zCt0F6Eed z(|&=RhIA19%-#{u=ti`oR-sSG+b@`@R`gRaa!~&}$*h&Jv#C8fs`yd(g=^p~8~VMm z+)*eNZWw*k`J+1k38c+T+L-x$#Y+dWX4Ulv0hb!?SjOgSH|P1C7ApT61F9?H?om79 z{Td&QYEIRom!ATqF+w6AKrL0(4JAvFd1 zZiy>RWEmqC}SY`UdXTDreULMKu(j9E(OkYXY0RSkq3@c^|jNF1#Wm(?u;?29M6kc~9???ARSzUqUX~_-&XdGE28dZ0km3SZ@%q16R&g`_wr8$d^v` z`Z`Ksz&i5@03V=#_=msq@4!mA-oL{+pc51@Jb)i8U`S8Ohhc$$!%IPe3z)_%0Q;`c z)#QKw1wp)p$v$}PCdThl7CT#x%{SH6`=|TTV6KtqW)2SM0tAc^brg@anDy z0(~bEFNN>5JG^Qy&~KDWAxnJO7z2-BfKLwfw-h%}uM>D_(JX~{H`Y(@E;~~}m8LSBT=@7$l(#fG%-(Fy9P6k~WF4$f7qe7b17&|N^W77K`Kci3O>xm5*eA2bKpgPK@8uCm z>Cz#E9hu4OAd>RST1^AH%ImJ5`ghv{Wti`}js%M03&h@-$#G}Tgl#L8GglHH{CWf7 z8R+t7k;Qb=4G~R3suF@m zTZu277$e@Vy!l{(z2HutXyGri)fGmWq}so@sS!F%$T z7g1PeEP-CPLjBau&9xrUw`Rd*|!nERVD5U8>QHW_l(nO)JwPbbM=e)=)S6u%!($n&& zW++;~J8x0zi~Fn5LkBM~D>O9*>3N4QBI>I;(I8{X?q5hH<1b3646*|L!As`-09u8Z zB<~YFcy&Vd@^h2ZcZuV`C&ZrrOcYgVdn{gE17e{jo6}J@i^rkHfR{|@H|X!bcuaF# z7Q9I%zxP6GTP5RKjo;IM^kV(fU3UDlga1n!$I&-w-x+YJnVjO9GjOk(rJfkPE$EfF z1**t5fcbjSQ4ULtG!ZBaS*3=xX&l&};V+rC*Ei!W-^ff8!c8~d2Er1*3X4X7<+cwe zn%$7FOEXrhlVNQsKJ_u%ep!q8ahFlB zY;qg?!)86=FL-gTqP^3nAIlz-1hL}26z^QDG zqNT3mYeecLMYt#Jw2;=?uW{VZrhw%8fUN$f6oP+K4U)>f63{zvG8z=rG?bJPe2J?&V=uJkYeGDJrlx{i-LK7->{jQr z%F8#QKJC&@H`W8T+CgqXIr)wIqT4D(Pid+u;Bu`=s$->P`@N)h-pT||62)AGZwIjH zcQVv4WZFT7J=ov(-SwUeIKu2kY5|OmgM7o$f;S#ekJ7`U5v8I!ds^r_x0i|Td!2h~ z%6s`h^xnuP^RKG}QLSeS=TPc#Ke2H=m17n}YI@ZiJiAYzYhv|k0{&4jfB1a2Uzp&= zn)uCw&;&?=rTpv*@Z?C-AU*pyMm*~>h;Ks?Jnf_a?rI@j2drBFQzFw{;(BdUXQpTlmI_nJEe6-tg%l@aiNkiq2A3~n;rDX)vv^|+oC~I0y%c_-P3*iVuOHK(_ zx^+>x*pqhnxNRE_tbYyHZs*Xz9RMKW55z1*_h}T)LIDjz;Hz7QQdCNHuXhZY_xw`j zr(>XItDgeu%kD6U=|%+u5su}yZ>Y`85=_@6r6s~&>&fferTxlEIxl;#++(t^p^!@; z#`gzMsZUxQLt)CMePp8>yQoR}XFm5#(yIzqsIwtTN}_p|2FXy727u^3mFkZC&W_|Sx6}_v{bPd(%G|9U1gwl0K9CA5++bFcQ zK`~1-MomWW+68?h-?zRarE*#dkB4s|vW8+Mwyxx+vt{I3VfRVvvE4)G1?NWIJ<3h$ z*PAi#!EN)C7-ZhIh~k}ciZ*V?C({p!^0P@@rAMmPJ^>LGGrx3SHqK~NYIo}(FDMwY z?Hmrmok;5MM2YdIg~X}X_;TfkUEwFZ9F9MOd?-e$VskB!l#p#Qt0iXt<#`CO-z7+S z5$*A93j(x3y`f7f)?wu}xYvkhg zEn6Esq?7|i=?sV7$uCMy(yvxF7%{SFoN#SrMFNFk^ql^>%m5OiwfPY$ZY>9S4KvNm z9o|&_3|4J4BbWVbj9CBr7buZ3t+*g<=qk`<(wFs(8*Hs&SS-$DGVsOjmp2tVvJ-M3LZJpf##~**c@RMJm>V zyOe9Z$0To60zwxexhK`D#a`@(;qf{Q42ig-XzCBUHKd2u(dI_US1MkZ7RYK9V>63hfX98;#g;7^=lVv4TD(_5Pz}C z0D9<1_81dxu(@vRtnRiw$LS-c5=;Lz2y8t(PD8_4sJ1G1KZ@GOa~!ghORtXh@l~gF z-olE9Wswz34dy7gaj@EJ!j6Ob&`#jKl;z2L{`rcjwYek9BCfR>7jUWcNS+ERQs)xe z=_u-7O6B@ibihxhah`8q#6wQ}YLt`BLFoa`;HMbQUk8#NFA#9BM!FnN3gA^Pc*kh_ql(5| z*dxWY#P`vrZMb;y)$F(DGAk5DyY~L(WVogaFMP14Ixx?)hC+h!d*HRz6rbr9ZFf(< zx-m;eV~DQIGme@IAIEJcJ*K?fIdijZ`XM?p9q^M*JP_DQZhIxu%ErNL>AyUjbe!SW ziypLf-m#e>E3+l+*~bl4X-)t#jeZ4GrS+Hx#m}B63PMdq&t`;6uP>xOqCEWg(ctN? z(NU?@%>2u!8LrP+<9lO|AAldn1mTKISHQAk{x+;RPZOKUJL%T%uLjEreEQd5Xt375 z3o-IR{G0rvA)=%|nLn4U7fbMjfN(z|V6iN-Y>GMsqsYpC<%p|6>&tzPtoOmi-ljhq zUxhhl*q+K+J&3PV6bNxr?8V=e20Q#gF^B(wYSOX!28g5a#zX9FA5$#wT+NfKq@DJQ zVa~ZixG(nR4g^7dVbpcbvtKu{GoVv3jf?jz?5oKjv;guku-hjBcKzSJ0Kml7RCcm$ z@kXnl9fbHyc|f>Zv8q)$CB6DVvaV*n4OJUT&+9jc*r*H`tLt(BGtKjOyghgg1QXL@ zglm)on?+@D@;0R@DIXOTm6MK9_t9mnc*S8l1V;3L7BSAhn0k@AjUWYLq zAwN~(fBG>ZMY?VjlcRg|K9XEC-lgbTQS=(urlct{Z+L_QQE^6#4%Ikm=?J5VJ0lWW zL68NAUY2+9wUi{;zs#!@u(ycUqgoSB{}NiK1VRV52e6JbDPe-(Dibjv3_)P3#kx-@ytuK`;8Pi+kR zTM|M;9IN8KkbdiGrDp zuu7*qsb4q1TH-j_-=Co@#4N}>D&wq|I$n4HYYzh zTU-R-Nc*MfKZerc=-9*`(p0~uTOJBo;~>Jie*}^ybFFkzrM62BVy)DHQY)hAV7L+p z3;jnP$}b?j#-z6BzPGc=j|g~oNBo~_9eBayzpnMbr;C5-^MD+W@0fwt2!a5Hxyy@A zBoaVJSsjz3q*vAtE}&@D(JeOv)B6%$ZmWm)`b!oJWNf)QVyKqQ``@#DO)vE{y(1+8 zJGuZemK2UQQn>nXmKXd=JEtNJtKYV+gZ%sR42-rXD1rB)MEKjoDA6%9&Y(cf-fdF= zKDF!arl0ZH!Y^=2#YMQWG{)vpp3>54N3mbF=9bFu5~j16EnJA+%7IkTdKg8Tt~?2@ z+#XuBia3wa>|?reyj)Nhl{@D2MWk19Iz~;3&h{drV=%AJ zF_+n`qA@_{hnp6qyZPkd)5)31Lm&`OxVD+Aur{u2+Jx!)$vQ1!o{bpwsv=TKAXxRY zR?_46sH7Fj&&k$d2NU$I&pTeoMIS&I8@_s#9d=ltt=p1?i}b(jO--x0j(HGF5_$_l zE&Q|{wZ1rw8`y6uyVV_;>Kke8V8K?-9d~oTL#XoqOcm7S zKr<;wefxn;=X|R;|2h8d3nHJzBl$e{a`Gu-w+hQ!tD@Io1mIs`4!V?f6ck7wzqAm# zjN(sj={`rfLk?pM3Kx7wa1Aw^5K^5=sqvff{iA4 z7~kzn_tXFu<2q!Ua`1@UE=rFGDAmb^ckC{==9_y`pG{vMlf?#K6iRK%(=JAAd+DKT zByeBziPGXl?f}8Us?pLDqiCb$+64dVny%!H5!v)5NrB6idO|9;F<0Zw_ScQ?LmILa z8jPBpg`dEV^OcsZbrq@g@5+2fMb(fkbiZO-jNrV`y()!pkqw6%s*Hd2jWbd~o-$XY zmgPSjA5dfVQ0{jj&|=U-N6!J8qT)p(THEk7eg+NnlRY~}{$)I0-$aOY%DNL8_6n>- z%!G;fsMaW)gm*-JV`d8wy=A2r&U}0m{Cu`_jW!#u0Td|^&o|A!Xx79_kc2)Hr)kMk zs8g?r*vodEzx@PVx_t&&R9W;h$Dc74=FVG+m0I<5Zb#H;H`n4OAb7#MOlPQYJm3DLqT4EVx)3Y)CFr-UM5Uz35j;@ z;cL8m-R-ag3Bm&O*+$lgQ!JYe&ztJc*W-PBo?P4?;5;(?sjI_F5NuhPR*Yke)2b5o z64hO#B|dHy^^hdS-vBzGJ_4GEh%s)<%0`>D@7<4rmg50~8w`l9np=NLG#aU)=5tL=AVNjtqljcQ%98V-S?hls#}7W;*aq5#%+td9eHIC_p>hE zA%XOm_cE$_UTvVnsYjE6m3Gy2cw!J$=9d=(^mald(H{4pEbn*U*QR90 zq;sG}aW$I1Rvg8yj9-_%3(=$Zr4X{#uZg4)pXHb8eagazxg(Z|fuSZ!IHDIu1Yy(I_HtuivmYN%Rp*q~kU!!GJbEdenv-*W6}Tx6?vDEm*WONOJe zcMyHq!)1)_aj+IN6|FUzFD3mt4*t?#Dc$4|bks?dYkxG&Y<|%D?pQ^SY1eoo31WSQokA~iR_xh9S$R8<&zlG#g)cfViY}Yq*n0s4NYNdAf8LcDWhlH?i5xIUk^4Az;5&a z&0I$#U;F`Z*2T*EeGwN$o+Gn*fZnx*7u!Asoh6IRU)CPssEMw&lhq-$?mw4Ol?KE; zlKC)wKvuTK1B_br^37WwT-w-Swl7)qdUH_=WA_v15WFW~OTrXikDQ(N0sT_=Qr=n^ za?-)`ys3M6i*wsz`IJ?-1GQz?Q4d7+ENkvJ$k7&I<@qbyE~i6bLqAk|uwaK>#oka| zrly8gu+O4om}F50r%mj>eicyQ`869h=2Y$fd}ZM^V@y?K{-q^&vqk4yqA`)NWs^!* z$*@}bqU`tX<(}e)^wx?y18}p{1_3#&5)hnb$D?ge^RSUxWI~DDftOzn!+Ys2HFopN zb-UdaKQfko>g^j{Ad2Ax-%*QIl=|`-ZPube#dgVzBgAa6_8myF)Rmv-|4dPW?>o{s z^3|pkxCv#j#bM7d4fr#~m!2q5mgFwt|3IZ zHkVm55Mg5ZVdD#Qnv#l;)~OF#@CZev1=8 z7(VPGp6QPrAF<;WpA~USv`F+9x~&^+)Sirdw;tyGehhy&u1u=tN6)PWqVg7J?|YiK z{$u%6*SPho6ySO1EY9;TS5HFoOVyQu#)}xjWG+ckRU%Yowd7|pEc!zglwqs~k4LV(}QJO=Pc}Em$ zk8fPzD5BF?6-T=i^9e_oYqRI6i(O~e-p}7feHpt%q0jO(!?Pm}o9%*ij`D&_i-Oss z_uM}DP@o&i2qyiPzGF+5iQ!NyVn+7nK6JmsQEUWIMEwI&{7QUf;#S zMlc%r#&`A=108^(SGZxtF_9{bX?XdPT!$Q{uC0vDM~s_Z|-n4h4fHj59N>mC4dZ928=ioHcy%r*_iet;wb$m!63V|sFaZ5=YJ zwz>mJc!eLbD!BW`<)Oc}+DMEI(P8oV^CTv;{NTP4 zbjBQ{212)Iz_;wBCf;!8D*}7g(1)XYPKFc9mM_SFeKjD3FI6p^WtOw56EEGk{t4w% zcyXT?-Jj|dCZwP#XEgirgO#XN_guj0_MEn%@lf68lH%5zdi@D*QlE*`H zmNWe)J&4}W`hxO(!(YqUuXML`lCtrK!U-2K%^&uGA>lv?zmZ>rDSAa~Xna625jBaH z(h9?ycbeXsA47vT74!KQXKz!xFjEU3z~(K+fstpzqPU&o4mG{n4T-z9*T+oxr=u9G zs+S^rc6^UyDDn$B>Lw5~Paf+2ntccUvAEC;h);NhcRcfs1(2Tu4JOg;RnfcJXZ=;S zu8A;y5nATxymd)A{L1J?q~(m{oU35s~0d_y;edU0_a%>9T07 zc9?<1fs4q-VWU^-Qm?S*jdPZTt~qv0Sp)a1^y#9_NnPwFik*_~@?^gXXZ*CE0G!sv zarG#MtaSTGQ<#yi26F1b1#x<7i;_Ro4oDgQ$YB}f-9M`&tPFkzEgw^dcsN&KZhvSu z7=8Xc4sQ3Z42qiSKEgts?LNviMh>6tZd{wOIB5Xyq*sxy+0jnD8mS@hW_D~KmwmF; zKLs$E`s2${$T>URAQ0OFvgoTY&gIJMY zG0V>N#Vmh6;D>?D{3*D2uC+W{vW?RMdEB<_u=Gge8~5+oR~cc8I>66eNYHj`yh$4k z#0*H1wzAV0-y6-py6q31D&wwE<$XP?FuN+Lq5_O}0onJ_OGRcA)otdwevKX{R=d#` zFpVp1L%&6{`ufpxA&#ArV!pQG2iXor7bc3Zj-Z25n#mEo=`J7=}io{ZL zAMt$KHPn9+yQC5ZOgUEP;Jx(Y{KcnI@=bXZ5n)7M!+~bHGu$rxyoiNOW=z2XnL_*F zYQ{T}2@BnlldzB*BQ)9i| zEczgAF;Z+9QFX}e5h=_+5w}+Te2oi?AVcm(+nK)`c3z+ktRE@A>(}QUEA^A~;=PoR zD*uV2)Y%uorf*bAEqoaM^7;dIt|KfME-&jH`h486{OrWC`qP_FRdnmH1=$0B=&H{7 zu6A8x)JZ>1!U_82CQ<%HJUTe$tn{`ooYmlrTcLfE`00+U4Zrgx1o${ z#tu`TCwwjmU}m-ccv%SQ7gftI`6c~`mDTFTM;Tsri0A{Y9Dy#2@^rZS-X2|<7H-*n z0dFAwfK7)5KYs-niMUBzt>D7x1%%4V(Q|6$-?h?ccSs<&vfmJQ#S}GL)vDfJdxE9% zhn{96aS3Uy0jR3VwlPAF?2d$EU)pM8dcjKBWm+FQk40nEM&G{QRCIn3R;I8Sc5CiR ztma#XUSN{C)LQmo^e$|O&MxuZ)+xm)>7gUl>iQ=S(`;Z*+Q99@yN-SHb<#&ER-3P< zPlkZ*u1~m?Kuji3^GNXbU{`Q(Kyz# z*DhuAE8XMD9!1AOl`o>zeLr|t`?bEiWk?URZ}@?qSERD^kWfZPbs_*Lk|2v}8}%wn z5j2N_&pb>+#X1w0My6EiG~SA_9c%YDOuoO!7V{s+?W>W5>ryeliY-{9i;%rz$uMhflzY5pFL6+t3o&$wqbx^7he8#KQKOfN}p<-~_w z?&$KKC72pvkO9-XSH>{0@ia>`R+uDz?lo8CW$v~9g6W;1gcA>1%cLNT^vmK< ztq`J-rs<$@9M$vRATHIMxdh00Z(~3Wud3Ql2tv&r2lv7}{cau`A3>+-RrJ4@d+(s8 z!gyO01qGENqN21QRY9s0sS%Mby?1HSdk;cH1QdbLk=_ZtcL<1dP^1P(=$+78LQA~c zbKjZw=Dss`=FQxh^ZsBmVF=mTd*|D0ueE+_iBZCrdJd`%O~18E78`VOs2?=-*!tC~ zitBX*+SXe3Ji85^k*wS@jHy<-X0k^@9TF|)16YFdj63tUHFJ7%918k38RZ4ebr6rI zK=T%;ZCYptbYyW$w@RkhUD2*YjOtbEaP>hu%H&y=QnP?)B`_srv`E&gP~e+Ip5X#a z1D`0}zu#VG31}H~9yi=@)OA`lFS!PNVgeOz7K%$S`ei}x7O%NBMY_pzw;y1IUBiu# znTC-K_sUmgL0uyei;lHt#viKuk|YeX9^$I&Yoljj$)~x-cW(YAg5+Y8viy4+Nr?+M z9I&;PD4$}__p5uKV64=m+NNIetI7*6Q&*Vwh@lF7x;RrKSq#oq-l;GQh9bU zw$-RY5*cq(zD94YxrLGHQL$id`aJzRQeciIYtdCbXG`aO)KYBh1W-=FltAo*%T)<< zLe|#MG^=y{^AziO4UCTN?4{iu4AKK1{k{}E8{e66Ef4D9zQ(osqi^amd>cJqYp5)y z#ozUb;>i_Xs)PVeL&;g9?y|5b*d^EB>M7XJ)5yL@EGKu)1SCf>26 zu0;gh?~zt+KNdq`?5Khl@~$&IZ7S1zI@KEe1 zw|ls|m0rBOz?JBUY8lSvS7$0{K&WRyR&OD4M~Lq&fwM{a+|O;{ButT18V-S4$d?T! zsC1O-AQL7409h>sWsVJ)k#(ebi$tEU_DR85#R?fV8G5)aO0vT74>ByEV%S|h%%5DC z9L~xkX+0i%9k%rRlR)T@T{tLtp}-S0&T7LR)p1u&`~qoA5AaiAW}iLCq{y(sxgCe1 z)ptI+E}BpoS}}Iag9d|32Y_TDhubZQaP*SqMo!NlU!^TmA3`?YjO7*&-&YaOgZb)4 zTaa=&+!PTt*8h>eQ%`#|;q+$VQiC{?*<>d%Ly1&+%4ctHEw8 z<(ik2!h6!ON{nJ^V)cY`7#j)CuXk?c_`@A&#zUu;^3)l{>vM0wqgj_-#Q>^R&I95* z3+G*ks0WqkqaOzpXA7Ax+58r?+vibB@wvPu))?D7y>S*4mQ&Rf$ct6nW1)EbOS^la z8__p47G>0L++t#sfsFq!D&o&n64+zp=3Pq66@?0Ixmu*Ok-0M4dCIM`I~nw}vdFk0 zCEz|bnxL|*$j;bz799qkd;;_UI3$I*C>nqNxCFZF!pFZIbFqvg9j{z)ZVUJF0G(Uo z(>4Rfc?z3Gy=f!7$(xSWzc%Y@Pe3*7NFDvbok?NBt@ox~ckk#7^l{krL2=3Fn!uzL z3Q4T`9gbRF|BdeOWCFbE`x<6HFHBcOQ$N6WhClSPGX{mvda>kBGOK*i)~&uq9nBF% zDVZXLfN9DYl`aIeJ9eC6lnNDjbDdc=e%|dy_h0#ILB0MG)wrLJ!mGJOqDq2R)}=M$ z2?j$1(wwU;z8D8A5A-g}(cK$^R4a`6AY}TQHv;U(d8s@p*ag~NVFa9_#K-sVw*owf zl6C0SZz^rg`w<)cfa>r(|Ku-`cgN4TK2hp{9Eay4!_h&%j>yl|=cq1uuFebLSL)BN z18fiyoDlNsFnVF1Z~IKEihv#uDFyAS=ychZ9YzCE-c$Tjx}&L6Qv@_$#RXPu47HgJ zGgTh`?Z$2eV)R~`rd}+_h0O-aOKa zySoqK!$t3z_(Rq+S&jSs+ak${(LoZWzS-qd&?&-gZU+^7ZDEu$zv^z&Ew9om zl@TR81!V_1l{4j&_njLk{I4o3SeIZ>Y{Ok>igrLbS1W1oqG!Fpp(L%Yd|8{lXYb`&B32ZdnH9WV(1^bI4ipywu}=L=J{dt& zzZniXMoNi|#COwuj^zU38#}Zh$u~?IIN80zGRG2ORdF6O{&rt#(~l4!DC>$0%0<3L z>j*SHz34vR`Po@&EdP+cekhcPBq8wh3PKS611k42qf6v_lBLl6?%wuy0BDg60XB-n z5cfM>FY+UFClYO>WU_}#wCWX4ull3dpXC>N{%7&y|2Km`7K-0?dE@KhUm~#5zgB^d zk}VPLTH+DT|F7Kp|Ab5b=N{EjffPi6H~x1NjWM+PM_)I0IqY1+3n7=4sURB(}zBr{Xm$9{rt7qaj3ewx}LWtLYy6_*WL)@wJY zvexwG&)=`hj8PXC-Y;AUx2_4S zw-x7T%mNxwK2fEdW+wWyYnHCk)VKRmxZzOuS9QpmDc5YyjxTw-J`2D;=s$o24d;bh zaMzz1`p|ZB^y)LIp76O0LhdOHT}(aDuXF4hKc#mps$zQlQ09z|t)fg)O5Ijdy_%`O z0qa|9tn6{nDi0-&C^b#)xx*gPeKhy_zVSSZNe<(Y7~U~j%1#ZlT&X^zlORC`%m~^r zx5n#^=HJ%37;X3jjSAXzORQbud9xMtq^eCbi_3;{Q;q7lfZa=v4qjW7|Eu*&=Cf3> zn@H_Cn0seYD6kMw3oXI@8a1MYS!kgmFEC{<0L`xtVn1gRF@p7GkPwhr)em%`)jKm4 zf(oQ5Hy_hB19y*0CPWn*OHM-~a9=>m2k4hSq*X52V@XpYo%MhEu?~HA6*%I`%wHj= zw0dQqVJiwHNO=q<>528nGWI+^q2()1OP{7Wy;kA+2tIvUA)Ww8SK|E8aeGWCD%U|Bc) z%asI*P$|0Vs3r3(Lh94~Q$`H;nVwzfD*bD*?l0irjvv^PhVcPc!2y~FHkyP;G6QsQEY*^By-HT9fQRHVH-S$m^uN#DI}!p+kQI+#|29NN=~YNlY# zb9j7C{e0`~c*XCs1<~I$Q8k?J&6VFFriPv*(W=_I)iD2guRR(JB;6IG@&h;|m!!2+@T2@&fnRSXd&MR< zv^=g)4nNhN32!RFVPUo&qaDm1W#aq*s>#J7RV2cqO&C1LB>z1xMQU;6*fqT1H;hm7 zbx9#CVWkk8bS6Wwd!hB*#VGdlaOYpI@ENWAd*K&)UV=*Y9yRjHO7zxDixKwsj8*5@ zWY0cvYwbeoosEtp>5G0`z7EEP+k%iETa!!Zi@O+qcVI(Hob;S)<;9NBQ~2?>V|>&k zNy*muB$r2jiQHRX;vP_@K#=+*i3>DQaqtgT(`>6eqva*@9}93r8)tqitEL1-dT zWsotZ!AjVGr8(qMx!?IK`d-gpBFR;tC2;p#=YYC=#-F_7kUtpev2Z*|dH`}q6>Uv< z*iWf5RMUPvW*B+dyEF@WEfwgXsytb@{RLjJ^vyHoTzHb%?fxcf^W6^26T!?zN{4Efoo%`$|$)}rg;sd!0UEWqt?AYj+eI8T7 zOR`qwlmZ^tr!tx=IwuXEo3?#7ZvnZgYie%ktJIi^YDqX})ZB@-h|jjT`chCIdlE3S zCNqeGXSsIQTdo49qSxO@-gkAs zI?rxJxWb`);1u>5vUkXngrllORUlDd=rQ;#Y2&omIzfiZ5n@T~%IehAXc6-nzY5-I zbbxtmPPxw+B{hxhjZ`2B>;yJfZ1|Z5cv;nl?MwN3ykAr2)^orNBsc=z9{)2MUpZ4o z|LeM;kklKCiK9_!U=^-IAmrEt6l{cAqzjlG>C;sxetOA+ePnhZ)UUss423vLq|~V_ zAwU(RwoH)-j9h~)km|{stI>Edbf@g9?d0)Z`32n_quq{EcpkR_tmcn-)(k*{ zbsyxv70+~*z3LFkYH8MlC21}YNWh8GU3ACT2v0+Q|FhW5T9GTuaLE{Op(raFD<5FmSQCwDFaWN+V$=y z)Fs@zpRJ|!FO#4K^u;TXO6%|zQdmNTng83>(4C5lCV4 zyGHeE=W@h=Vg{rOQk@ht5Cx5SaSXljP* zGFo*mm3`#sWvckrw2@N8cSZR4#m7gXTk7`dk(L4{a-`=vUjJoH(f>J^CPyUY9uk}R zva;N(G7LbB5lOlOc~o}|x4{fF4p<>pjsuQT zjy%8vcXx(;sAn}^q_Bn}eHy>C02Mah|~*~kzLs~omT9{g1r z%N-KK2*l|N3yjNFKG=UcvDfjSX?8s3=*4f5h`gBn`U7uhc&bQl5zrus^t=nwKk)W_@VTPg{HT8Qr4F)HQ4@b zAP&1fBO2G6jhTNqBAl;hOP!_!%P~v2m?EBU-6yrxKS*lMb^cZI>1f)vl#fLJ=5{@d zM5j-cvQ2A!t)!*0$F6r0PkDZV*Fx@zJjsbQhrRO0a|IX3hTTjPv*OiDnfahuV<4%B za|>BD&z<9h{}Ox9I|YT@Y&<|BSFfgwB*SPovUmW)EZ3r9C-W#%pBgW?ZNpf_{P@a+ z`K9o}*^Okqk@^lQk-6g@Y?>S79IzT9E3P+4J}YU5RT|D0FF(8H9$n<;I`)-2mw$Y< zsIqo^U$9UsTILaJ(MjQL41sM+rSL4yCxipJjpv|==AVs`4r^AXXL{X#{8(O&^Zo^$R46 zX&=Q>9a0_U5~g;>qMGf}T@-eH=A?>*$t#curc>)bf3IXElFZW}BBlUvO^Bdy1hG+t zo&tQ%|M|ev1(Fb_h(IZYroshOec3cf$VHSjIfF7RNQBNsL$|nofgO;ZwZ7QXRFMc)XchMxHH7kOH`f;GL!<@ts(^6*`!Jn6UsM2 zj%&~zc8tnP5((2&xM8RUGyvG6t0#7oX8JF6tnOBW{S^*CQ01G5eeb=8>P$H<4W1db zoL2$Ofb$xF8ivv3_d^Zt0^wsAssd7hc1ju2t%!+ay7JzULs)q%sXq(LlB?g zHMXitP(qywXbbcC8=!6d%LUE(+MNpPnkFSnR*#Dl){%<{o4O;TS+=Tb1=$!!S&d-c zcb9=BAH%QP^Q}X{ds$m51*YAsal^-8n*{u# zpq0xoxLmf-?3?{#4s}74OoJj`p$NxVG*Lzv;Hpz?zjbpHpp>o@AhI23*e{#ix&~TR z`b_=3DoOqwIlDp1TD$jhHwjPv<*rW>T>^v!FxD9=IBamrty|qBVQa=yumhf!?rTKY z=KZnoZB~&Jaz5d*qhPH#w7$^A&E(syYx0!kIaOx@VNB5zsRi){v!(LrZ1?tO`gwen z6T0PUbG*A9bxso`oVZb7BHGm)r^=D&$q*wIx@}1+1{f(e;xF*P7}0r9*SVmfrgs`g z<_kjB?VwZeMhR?%X{BRB(_Ym5+|}v>kW5;`5GDzDgu+itdR)AsRASfu&{$LVU%)gR zkOi(3lK>d~h-&U0h5q5d{w1=;X4^OJ^B`BPcEy=WJczuu=NQ$GwVqvMl)0Bd!qSI% ztR=~pa$NU7n-0dLs#?FjF2irRGs)FO`mq6cLqs~fF{eoAvTz)pggjzpughx9WD#2# z9}RaPRx!@IdhD_#-)QH`(uZC$Klx0|WC=UBlfv6SpAimVt4hSq|D>A9fGvQIe`T$m z>jr#Z8?7g+;9;AirxJYZ-o@8(#8NQfyqxr;#QsOwjgLvskMCRrQd!CP`uZ+Zp2Nlq z3|GX}3O<{5%d%3wiyz02&uZE~tp_S~4I;~1rEf{S3kvRQtSl;M(n0PrVVLzbLp{Z> z5$d7sQhn}fA>wm!#xMA=33t92!Y)=pKcFba4z8OO*mM7ipXjWe?dB7N&igSfLHCUC zGaK{caiO#DY4$Y5$%HhqFE$CDYwy(f904F@A#m6sfYxUf+ z5oaoz*Xc)>b8@a}LBqkbF8l#HdP}Ed9W}x?s25}s8hjR4y}u%04m=9jf~Ij^8JK3{ zAiDOjjj~#FWn@IlRRwBhzG@Jo9+X!G*@exUFDKIG{P8uP(DCJU(Q#~noa?*2bS#?6 z6}2b5va)Wj?9oyM(K=aU#j-%4O6AwTv;a zPMEcq7HexqSx57Ds^CYCucZRBz)3XT07$paR9KU5CWl0&Zi~b&r8JoKB3R=u7xo&D zOWzI@n6jUyrqq4wY*0+gDpLiPs0$r7=sS#xq$4(icTeyp)xB;=@rgy>@(q#!o`Peb zo2lc7apVwJ&rPy5ZvZVeUo#ncMuNo8df3sG*Ux8(Y=Z7}a+B|wEg>$cRSzG0mSCBv zJL!pYlmP)@LRp3d_SI7gD$l2iC*J_DiK$;Z6&iT*f9_jrbkgWM(% zk7oe)kPT(2?)i)0++;?;uPbZ&Q#{R{4j;7~L*fxNL)cm*Btn-tl7#-ym_C=0YwO#+ zo4Bdj{NT5|TbGmso*RJ-2iBR7LU_eJ$8w&i^1fo(QP?Ke|727&6QxUaF9>w$H?Akv zykw141@y9zPVq{t!q?{&U$67=vo-HUbp<8tGunfv39N068YJvj)75kIu?A#lMadO} zZ#$d$?gFuW>JRn`C+Nst^D1n~3Ydho;hP^#5HE-Rx%vZUy?X}yMiPV>GrCZ-Y@>`d@|_76)TWi) zb~IWI;~$iqvK63r4L=edCwOYtMfY5y9&UqxF^kTL#Vwu15Y=qJ|CD2D)oo5`ne~z1e{z|OF;_vAh_FuIH;K$Gd)u_A+R zL&oY{bomw?ixTy`9;e&~Uh4!kB0ao_P@LqcQMhnYnf3&><52drtec&II*~Q~L};_X z&&H6|5^!)w_tv?x8l&I01;0vwRz@kv;+J-y%CFB(jiZ}@dE~S&RlIrT^Ke`ruCJr~ zJ$i_}ZGcTpOHPbjLJKtv#Me|ah^L3>S31Wn69?FT{7k?;0fdXRD=OE);EsTK<8RR0 zbFW;>lOHepO`XwC1kjbj=jzihKh8#qv@k^@I`hZ(R%@H)(_tcvL6C9^1- za<!(C1P*ITLEI8RXEu>`dOVR_r4Ni#99qWi%iQh`z90( zY-Opve(uaXeJGzJ-@U>B2+aMJ(fm$BfZ$xhw-O`v$eo8VUA5k2Q^DPk zUd44W%OGMtZ=uwTw3%OJ@DKMW4iyoM&^}}(4ZhL2?|1Q=j>vv6*5YDB7wrSR$BpsP z>}GALX5T3Qb3k(TqV~X=dTB1r&P^i1FSTRTUli?uQJ|s{i0KiUwy{-~J%8Fzy9scy zLHG;W>f_(GL^%5U_Aa!Ac@dsqfJ^x+j`ASDz}(uD$_mFAUUD~RUIKd2zg-^3nf7MF zI&6s~Hnzq97`%8R9e#SVpe@wf*r%iRnhWdWreFoa8*{6Lv2V{-CU(cw5l=YPc;Hrm zt=t`!v%B?b5}AAg%}&;6NcMDv7W^`s8Q#qARlX<H(J(I6?%}E!Bs4cAoXR{f3VTYOoFJ;rHkKih_7-_%i5i z>Y;qKgKK$H`)6WLx>GmsS}u@>WCC?DOu0#~6CC6o?Q++bsf=`;iyJTr)w=MU@^Hvv z4XO49Fj4a&0K*pHz51lVkxs@s%H%Pt8r>XFRTe)@xKCTr2$;fC2_0JI=ak00NbXW& z_-i+pyAWst*vRuCvit)e+{M(_to>Mm%Ur#J`uUy~n!@T?w(0C{Nxl*OW#0*`0`1@# zaDliLwnx1EyV3m7J-YR$XQ+kaQK0e^{}dFzeRf_cq{!i{2HK_9Pt5fLsDTByKxH-5_BrMpmAkdOf6ToJ!5c$AP;Sm`^}2Gt zZ!C~6ek{RTevvDHAtS5=g?*|RCjbL~$86d+)8Bkl;teT^6lXGGk$|?t;YEe{_V3K! zPAvQy=dFHDtNH0QXekyNe>-Tioc6ckFVu~#?%0j*3_e&JAl;eV9SuN&EX{<#B=z~3 zxl>(EfIaX!VXe-F~zDEe)9DPcynWBT^FQB=Dg^1Y-eln0hWpxM{Vg*u_4q*nwm$dCB|SHD&g zT`hVk+qfpfBb@;pDGm#Viw`L0oftKQm>xqoz;K_i)NYrJPdMtaDmRgsqc?VH=Rjy`;6ePtY;t?zm; z4YR)}pr<_r`Dp&II;|i-?0x#yFCu8z$5<+C%JBesM2l!1 ztyH|^D1IDT8_5l8ne5R)jtkM`1H(O9WYV9#goLw;Ca|7bgz|~%GK1fRm=}QA$I!wf zk_t%uG%D7IuJ~!2jy{)Ebprcgcq)m2Nep?w14OCdq)F=~DF?Qd;K}Tq)rT%BX&aAv zgUDx_7R1l7pVKXMH$X6>|56t>lBn~vBdl0P`{Z$kLt^Jsr# z>o5C_@d?n)z^yRCi7y)>n2Flg3GCCip?-J@7A>V@~>ncxwJD&y~OsEowL6xs%%#a0Nh*ZwBZZOB6eE z8d|=4#>xv>OGfvuPUM(pbzPJZ4{O?g1?Zc1C(3&2B1T2d*v|7}punF|&+4F@ zQ9|;AhaIEoYsQZSM2oPe_vgg-gykFBZj@V#y~IS}mk9nqW0@!brNX1aHdoCerR4b0 z3(;MC&H!+;TP33IXFgCUk`AlOxmEU~`i1kvT}u(puR73M((PfnHBDhhvxesUZ=prs z0Yc-&CKR~nX|yyZ0q*lepMH2XUXHmXy40W=TdQj2Rq;9h%Us_&8Nsq*0VU_@G=*g) zquS5erva&BRi&`o{0~7#cV&|P5)}>t5D!$YQPrH(yQ#z^^;lj0-*KT*tk5s9$q+o0 zY^Z4;G7=l!U;f(B1}@syH0=~gh7dUkE{%>H{4+tpC(1_ijM2r=Bm z*ASZD_HHKm>YeMLEPEr?ZE$cgIFoH3H{THGq*NeixPq?uQQeF#>1~RFf$TJ| zIPp1XWZw85OWeb8VUB0FEG-kFEdX{8m`#))6VhoP9|}xF7Y5m-UBWNuGTnq*-)B<) z2Ot*A2Ht8A97(kgf%Sf>SO0S?%d?uS(45+*_3c-E!nNmC>CwaRsU{(OWv)3}Rn4ry za2pNIHu99j2i!kqpq84LYmbXA0#!;;GOh4CysA=WBf=D#)3y1Lsm!;#?IYs z&DS=g6{~gan!*W-uDW7|G_^Uv!paq7F59u|37>^uUAOy7lt%?nHa_M^*j0GbLszEi zJkW`#1l!lt^&prDo5L-;sU}4vs=_W43p7d<0B}?Hxl{2^iDCNrXGO{j}l-U^N3!9Q10PS3g zW2G>%L|>v_Xe6?Y!+#~|XU$q&1#foM%fuGE)$D8?|{E&10><;s70x^R{zzRM&@Voan^`!aNZtRS2fFY($j?`sUOU@MCJme0L zT6WW|qla*TJ1ze3wSs7D{}5m7^uktp=T>r&>KtB&@Boy;o4=Ap_+Gnr7FcBm)Coeozw^H=#K8C--m6hQ! zZC$o6u6SP0i*7xJL{t-WQlw-34BShKqi@<({a#)xTd`TZCJ%BNIlU`}>DUu>xaENB z_;WRd@vvqXSM?I#{jB{%SXBTzvgV{j4Hj<8nv?FUt_Td5J{jhUar2><<9*umLI5y? z6aD|`=h;l**!o9_%4?=w#YS^yj+$;&W)#Rh_sin&w}Fl^lh4?}~;Aym;=AMu7edw$5HP^Cye^a5l zM4(!poRVx$JmQ4WnYL&C0Zjihamm);6NHH;8}#QXpMqx%sJ&nSo7b4L@jkhpoQzHL z#|4mwW_z%$^Vww94wXciQOuXH3J5De_H}^1#4-hMAV{~VrsYx6!%px#BWzi$gt`IQ zUnx70OrQagapW+84996~2A{1Pv`R}kFhy@zgP|(%y9%yq3v0)c>k*#3;~}c0FNcqp zPItsZ%NN4xAA)S#&$EH7-MJ3%mPuHtl}JXBx}#UYd!R0cl>ugDg>3NL@E^B zYD`+rsazX*N_9)A(63Q8TzP5@EuD2N^WyHU$iqhI-Ujdz(Lv=E(35$2!QCqg(FE?M z<29BqUW~${;Dd?E4(f;jUKTrc>!8~c*m!QvnLWxUoXn@wfeNPu!DH*xB>A^!@y1zr zl1p6$`KZArF2LT5DqA`;7n~04<{>GICS?RFf-SiM#707H48JA!?9&0y-`}>k%A|I7 zd!2P|%ZXFZ!4h=!>{1^qzhn-1<-E_LGW5P7Fh5LtunA~*(%z|f6OjA;VPpJ$CA=>+XjN8Wv|7BPe6^r0LPD#4*;ULhDO7SvPE#Y(ih`9dvqfA zj60q&1Ik}g?{@$5INmb`ixC`->7+rFEMmmuI&vRZJ*kchM=1C^Acy$@$2t%s3o{~i z4Pvbc%>{3{^BC(Ey@w96yYrYy@pAOyd(ui8;7 z(qs5Yi8yMsU!0#1j*7wJvgtyL8@=t&0ADiNF9Cx>9fC4^V#7YIy-lhKJPF2>*53(VA5DD+cPewq%WXC zHN&Sw4IL5_{|-BYM3nkFvZwdZlQvoOTVSZ%-wMGHj2e-(hO@;3DpDbR683tE4e=5I-8vB`d zU1n}-VM3Qe{Jfma#^&Cu6{lEHdCJocALl}bA zUKKG_D!GmrqwOkoe`7OSb=-xBFM&Hp9SZNf zg-j9U^t=A#RFy@-Qfp=UBI}o`^cv9e@HT~u;?r!$p`aq0{9}93I2ljMP4sFe?dHnW ziO@FMcYH14;^%uuTZ!C6NDg7^#NuKCTPs_FF3;E|+Z%EIv;@#|AoK{f==q+_ScPqE z`^PqNA9Z5fKS7m_I9Go>Z^xi1Lduf1wN6fDg1&+o2o+nAiJ$PC37a)^1GYNUYS&2>jci{5aT9w8o{NU{^vTB>e2z+dR6qy zbU`)1_xSbnFSf`nqhh;JWh?96;G9=|U;|ILu4Bh(8o_gSC%L&I@Xrz~)vvw#LC-taOH&x$8> z+@XApdi%$sh^lU@_G3@Xfy@>Q2%tuh@N7EOE|h6joxT1me(TL4lpMes`WBUE4N>Jg zGI!O(l3B^W1554>ykkQ>@|$S90y3fO@oXI5FAJ;DDWLk8P*1GNx9!Ryr8JiB$bDsE zFKXUqNK+`GoVn6;#U;})fL58L|2>|MUwr|WHk4vh2LwPx)o;M3TAgWLU>NlE_upcH z6z@G-aU#8BHDZ>Fwrm-W@?_EJW=2*|JSSG#oEJvMUa$wNs;kIw zq_}^F*Tt-ImN`Ln9lTzos9>&{;ISu$f^{>hVw#dv4SWL-neCf$a(>FBxjzU#BiE;O?0NS(XjZ5X7+-N)mR%5eHgk zsMPVw_+5fLc*U4NIkoV5Qcqu#J^$O9$s35$V~liem4LGNIOO|l4>KN1ooSA{A=h zkiw+$!$og-@{CTNZOgz^+9LMVtauY4l4yIPMalxIrV8y2r%qbPPKvnVKWz^4M;X*5}ftT_uX85rmNGr$?(FTs!f{mw5*10-^)U_)I~%`q zr-ul3k}VEf0j=otbH~V2+_;kd)RN$l|1O$L7%~@kB;1$~`rVx&|B$eS#T7oI{X*SO zOJo5kA)snpNo2vJFcRwNky}UGBVN^Qf`Tu*fQh+8mwAIdmP_G2a`2=wG<^C}OMzvs zm*so#(??3T7B4}EC2_28cB08_UNWC%2RJk^x|1XweP7cmCW zBk#N?{Hzn}>yC*BsHm&#pB4EGB?gF5;Tlfw~y*Jl38{eQJ;t^DKS8EH` zADd>}V_WALM>;QyU&9f+hUh!*J#wM_)!><=c794)oqO?T@VWv0??$VmCQ#0aP%wAE z$YmJjApq%QNrTTLbb;$Ww)CNB>;UNupA7%T)0O=PT_gSdD?QZrag}&xg+{1OQ-e+VXa6qPG~il$>eUvXne~BjR2BQ#APo z(4+-*4Vt9P^856{5kj66>Dg!S2bX*$G2x5lbCUhU7J9A(_@ICj#=%N${={cTL~&z$ z?*N^f`XcrZ>#XiMtE$C^A#a2Ik3-#*B*5XLruxwXwZI?i+JuYKfFRA&=YNHUg7({C?O@%^rd$H3@3 z4D#LIXfS5YYU0&W%X32CXh()-eRK1;%cFP2q>jDYUC^4JA4ly@O^1?_HRfM87=3d_ z36O7;L3bMez3E4MrCbN|$2iVMm@@czadGAI<>p4wR67aMi)l!m!qi;g*7JSKOp=<3 zp-0+yoxG&ae~EOl**?Ct3weyb_7B!-&FxF;IA3(8e@FEF`-dNB`bvH_G!C;i%QVo3 zZNc`$PEMpsTG^3N0SwhIH`bMC61=geOu1#Mj+6!Tvsa4T)Y1{9={@`yDc$hOMhMUTleS=IVR`0C zY7<}B2ndKaVvFCLx`&#RXKP5f#%8@{ZT1U3H4;IrmKOA;QRHyp)zpQ@mo@d&0B-^n zb{wCzruM{p`oOKFgxvc_GjM-vOYkN~?puyx=uCbg(N&dKnpt~Ir+5k#HUW%g{d{V> z?krTYVGw$Ff<0v{5;`?&53(~>n$r3DT=*unX|IU!EEt6SjYm*9c)hI&$#;Cy#rCF* zrfQvounoy63}I?%axN|jp30r2+Wbp2oJ4D?bR#VPC-*dvb4+sN4$x5X7fcg(4haob z%N)-)FGd7%v*zCV^V5uMw15Z*saK#wP9!WrJI(*%%fRNX{l|DNcBsJ3_%a%jk+>MO z6}1tz?DSBr1|{+3abfI976wZ1*u+$${rfS){gdnVr4L_NUGr93>o()bhm*RUIdur~L( z>IvV%pO%dj#aq?;<8b`sS_&9*jNY14cS(qNKVggJ*c85WA;ypMo6V0=Av5D?eJ7nP z)$6!+C!T-#5i9d?|UDujht!`&%YRxRrEdk|(9?QCn6XmVnLlivx@lA||&jp8Vh%y^A{=FA3v1U?>sxj{dV z*uD&SlWdl?IxKlxsw5!Iw=rWm<1vtY$xVJ&!67W==lE+;BV{9H%l}@u_P><8X(}l{ zy@o+6N^Q4|c+6emGU6MrlPAjx!=Zb zTgF@q>kwc1gq*{)ullM>9&FLstW`$UZJzwr(+M{U^+B0-T-AeSAxpx}A{#0Qz#jQ9 z!VXOi|EJl-1&Sw|eS&pR00Y0}%3lB{)1g^-!4PfKiS;-in`VU($McOKNdRhRIt4lo zx7P;ZeVj-k@FmEOp>Y-R65}=T_BZEv%n^T zg_=9Ij;Ui;KV!~#z*#a@m7X;RHP}T0l6~zvTXG`C^K|>+oBWViv+$+MAt>$Ev+V7A zTn_xOv*fwVTY!k;m# zD(>rwTb76K7+Hp6gTsr>}U7UnCFP=xEqx)(v109OBqGhj>Ny3yzR?xr6 zWaK;hSt_0wkJh|?xad{^g-u^xj<%Uwn1nWOG8}+_XOl|Qxjuk#+mHG5K519wD=)iz zpemdA6NPECPFs{k)4S+zUshRxW=`;mBAfAqPSd+u%7@xlvQ@4Cvg zsWDF}>Z3b7U9d+x?$L|?sv4>ty~0?Xz3#kH(+$^=&bxYA+x$9HZY=pDeoXqr7J$%l z-cAP=O?K!60G&LgKy2>N`b4=5dN7GR);EjfQn}N?_Q+OUWQK6WG`})3W@vhD7;Sy* zj7~CJnT62t?n>4jXS)K4PQ*B--WD7m> zLj$%C;(gWH)&LKgYs;=3^Z^InRyf7W(JWm6aaY=VONDmY4L`CmG;jmbKbnwkm|N@i zUDgXdPU@KOj`8wqjNW1R2%Ha}!$Z4S6_<_GLmtqLcf^C67r{Z`L#7i7#{+yfc``(5QOs_Q zq4e2Oc+rlWaU7YqU3Zd0%>1f&8x{4hgKg(8^3o^WtA)T&MF?^VUZV=IoMpxm@y6GT4bS$r6s|FMG^Hv?1OoJ-d9VAbg0o+vt#)tYj5&6US-kW45i!qr`dtR=nl&+HoBQP zrhZ|XjL{QASkZ~A%PC|1SeYsuGuj+V`Jnpv$3H|~kkrdPVSn-o{c#rCeYLd*fy}rt5xlS29$h3ZvV27 zm^JCf#|w}yE?{h0W`0-6WAlR7zc2Xc6Q^ENkapF7QRX8PK__* zWcyr6pGYl#Gh_;kV-x>!o*(RY5722d!zZ+3;|)Q!t=ta_JDz(qUU!1txe(1M{LV5- z{|5+C_YB0PPO6Dg18{H)88zz2^>8U}LC1{bv$G*SZ4|Nfz}XoOK4Tq|Yd7E7)yIie z2kp^+B~{0=0VHsdydY=?;mEH_J4DfSWObr+vAh0 zM&50X7j~35!QqR>u(1c{dEf%6A4!Fu%jsx3m0a#xgjoKFJ-W9Sq^rM#!)IrIzW+&# z5-<2?TkOm0`|*hXMwDSAY!)-P(~qr?rld6}a?@X7(_Olnqhrw$)5lQxWl#DuUcTVk zW#+z>9y@!IHpESyWCs#!?{HDW^S<%k!mpivt<0V}h5t6Kv=%>cViey#LtI9&1jq{E zwf47zSiGYA1ydGLs@cjdJo^V8C(w?uariCtF60t2Tt-4uLas| zN7E%eO3iV#~hAtzi17bNe9$iJ?relRBAD=c+bowpNUn0z_nzM;=>rkMv9fzZk>w0;f{mUesruR;9!pueZs=Q5- zFDDMKufIJ|rU=c-sv)#Jj}idp3D#MQstD6*5$P;L#Ok-5wfdveJdM{SuB(n?UY(NA z?=n?*qb;S#^wCY|i%~~z|8=Ei3!UrPdP*j|$*+~yc>HUS!dk8}zeGgTBdE)T6)|EU zCye84PtO_ZfnzyAizU8;)#e+JNxyGGRWfZ3OHG)wR6f#X{>6n*p~A2`u|=gzckM}N zw>OPd-EVG)&rRo@N3_*)@L^5m7BHAh#(k?lqLFZSgU~mfc%WYugQn!Qo4!lyr?-3wWqLdI1+W9Iw+V1^_2|??QPYx05|Rf z0Hr(UMKg%yI2qpE3#%bFcSrOMb*H^{~w$0k9kCZ|` zB;r6$wol8t?=@X1asUPJOD#M4HY#xeDFrN-V5QS8hpi$EaW7BLdMaLo`)__!^ci+f z@PpW(_^QprRl?WrM#<7)Q+G)8b6@PEww`f+Bu-g|zcq6TH;1-;d;5#?xV$x-qr0%N zML$b>G&Q1;_F=Hvxq<6JWKrV76HeK^oiG%w6EsS@*dFO7&UVUfG95`iNYmWt=#Em3 z2es@1YfNa7nME2ocO=h;c8o&~mLvR&tLGU$_0pPK8>_cdik9tX>PF@2ZZocd2j{VY zN*1d;gSj6GyCx#P=CMk^0Ij&~l?is_Kx;EGeeJNAT(NFO(@7d*tsn*Z6j0c)ME=Ja z4Ch#-Ye9XYOQ|8ixnU_P)B+erubp1CR=aG6U)x3TQJ^iDj?Zv$onKyl1NV$@%ag)O zw5iX$RwnY|13;@Z8a{U1*SPg-zb|m>DB^G|34rRH#N>;kkKE>~k#Sa!2Nf7n8-60-%Ss(n6~--fS%b;vPZE>jZyMsmj9L0` zbYw$PX@S8Qx1`%S6oY=HN9AKOot5P>{tna z{^@kmD&RpjtoSG(DySS@sdo&<|Ed8R%m(&Z+)=&}Ow{tWJ|xu)o9ec!c^-BWShmfl z7`YC%@z5&FSL+nHv%v|r*D>wcL>FB~6bVBip#6N40;*Lv!L}*^-pg82>Y|&Uhjq@N zZZQi2X2+;Atid!s5*7hz-J}ZX;p>~>n~&ID=wPWv2iq})la}_4GsBLX0N4;AN?#R3 z0&l9F(d?gPvKS}Yvkv^>i9JN0(s#fb$30sBB@ zu@Yzd@aE%N>?6X&Rm5`D5p98%1N-lXOEZ3SR#3VWBp0#;w4--zKl;aVg7)K6uVbyu z&u6cfl+tfBPLbM}9{JA3tJTjr6!Z1I&n#YtyZ zbd5{_VgQcGsx2Pym>|L3*~Pi~lhr*ApcGm1H)gTY1x$@a}1rdwVPRo~T;pDdf- zoX7O-1+tJ=of551=*7x?Ro2wLC}eg7+>*(!O&y2FKI41sI%ylBJ-!*8**tbi7NW|Y z9E*h;i7Gv+)fStGzAUh=kDLt>8W6$Sab)Eo^)#cLL|0WWFwEI;6t>lIf5{-jv4Io~ zV>nXBz1lAM!X>*F3V;XMh#Bg4=uv=Rdu$fJJSJLb@0U3Gd^2dVg(Mf;m{b8RvUh24 zyFIFb%|`bl9l!2imkG61b`LH%dLmyiuAZ$AP~hEe%@WUhDBQuH;B%+!U6<@8;MoN5 zrcrxiR41dp)$IMk9Hs@I%kJDDAgSeqp%IvL922ZcyJ!LBM9K7q;Q{%4 z3F=H2<(uG?ZpP2BiJAxyP6TRIBQS-C!1{|R39H|mFuwixI5p9vKUy@ond*+WlKw3N z{y+Qp4+i|lwg8q5ntHL4&Da)GGv*^{{Fh8UF`_Z?Jb3s_exi4@Do~r(S*N^2-Z8Tg zxx#etXwK-cwfirbHn|Y!Mb6o)c@w67gW@i$5uYy$EJu$YJ?3DhKQ=u4H4LCQy2oK_ z+yD`ET<_}9eWeuaA%$iCRPqg)$(FRcOT#l))Vq8yIoHRVTUhD}+smooqTO`A$VaPV zt@?{b>o%_K`IPbl4~nss&`u8aaZ!OPe%wMlgpYHBEwId3RbAEqre!0k;~(JJ2b++K z$-eFHiC1hru3V##*yPKT(onN5tkF?3+ijIt#WplZ+t*zi7xiNj*1+arm1fI#ILlru zvuzlkl>y)4-w)r5=J^BuK%@zn%Xy~c!^WcQ`JQf^Z44&&e8(hNpbOy0h9@ymgB+*( zZp)5^mR~Vk;~cAXWi2BFh(noaVe;xJY=4ZXf&v)OFoKHRdEQSGGm(mM9b~#~hp2@6 zaWrjJP6;IMalw@-IYE=vHXTo@EM|r^dt-xS&gHP_Fv|}%C9p-YIxWFK^?jdwi#V&S zD^1(ALHMc6I3=&C(GT3-rB3U5l{+$W1`B?o4THC_s^i@C9q)Vifmmi*Be^bz3vJ@a zMdUt4i1q8(TJ6!ztd@G=zhos2TyH{V4uDjyJG9jB;bJhl#^Cp43~SK!JJ@99)=XeC z8gTM6k!ErssAoP{&PkHjv9^giqEtdj$KR5ZI|j+?Z?{jPZ@2Y|U3ybB(*rLqlY$GU zT#bL8GV>}+m$(7Q+O?5Qj77 zoseVKgMdajzY;*mugf}2k8_((YZE*=PDtUQZEYJKlT)!Q7y6}x6!3`-#RFO=pk=CM z^XGFU;phzokSa9x2Jc+?*yh-Z6sRl-HY#k-e#p8%W3RYC%XPS~fb+BZ*z3?-3#7f% zs;aVqtoeIz>^u9gC;O96N%Wl^N&G#2EJI9dH-&#~J03sU+N7GjOWIoiqpL^_oR(&| z=!8jBS7)AQDArD?XIVx2Z2ED>8VQsED6{>;nTTpi5Co0tpq5ffG{Tp?AAa509NG^b z-KTcTNCoiLq3F%YF*m)6!q0buqf6Xd4{uI_LP<$zq&Cwn)GexE_bb1sJ5+ZS8tZM+ zgx=Kc@F#N}(f=ql?@3$8%cNwA_ai?)1!Q|dor!ys5;R|&!^i=>rSRI}E22}U2g)}- zz#3c+1!i!cbV=-`A121{bbV-0&tKbA>e(=|Zc4e6mha7#b0zZX5CcGu;_Scl73rv_ zGYj$z@q$0YxkmGi6S^4_hIA38iktGP0SARO1<4z6tuf89`axq7EVg(nu2*j5MO^#F znh{J(uYI!z3QV-0X-Q2_Lmoy*UGG8Wu+unfzUv&;DxE3tDlYh~!(ETO!=YR(9)Et5 zMr6parGeG@GogKZNra?YY&()pKCAIT3R-%{&_3CO%F#g|cnLttv148C;KKT~OK>VA3g6y2rUmnTYD zpXvoWZTx&g+YK}uvCtg*q?fi*%`Ac4)h?b@_pQc#Ow-2;&)7~Mf-|M4eR7o1W=p0r zt}Su?UVLG4O}zJ8HEGZr_a(E@sQy;B`d^X(iQE=*GznGsqwKa*hM((Wqb92T3ADwM zx!v)d?ZpRIz^%|;OBq-IAfIn!erE-{d;WB(L0r;|Poo|o@M420NP|@z%S8+uJFI;6 zhqU!`_H%-2+3qbMQnZCeJbhIXo80quhj8T+}G< z8~pR-!R@(h^n<#>H*r@VuEXTF%|E}vWel!=!PH11a)Zz!?z*NZXQlEC&!!TL$+x?Okd5bfDfoh`|h$arogi?!u=Xl zo^qR`hnT&klTPK3E+EtVrovd5CUccd@F#7{jX)geXW_;rXUbnd2ZK40Qh*zys2>8cX#VPK@elSp#Ed+Xo!iaxu`L|y6n|fTSlsgk zpsA+t1B>bG`QSO}`yXFhZyrnp=+YXKw{WaAK)l@K27l`g@pqMXlFwSIx~FPNQ~xCk zS~?W%%}+r&wAWhIIj3|IOJ__j>n#ATF0J!ODkOZDL>sdGd%}BL$YsuO)WF4tBrh1+ zhqT%GXI^c-bA^pAa_`L$527Kb*z|kXLdm*XRv!BrU^AK$ZL)75jgJ}Bctby{46CAVW1 zTLDvSKEfd;IX<%X_?jfwQHjT%_pduX14b4hVEDy+L&;8Rx@+G%+@d-!==&Pw;VFUN z;;w1?2%2#Vk_m(Z_Gewga5Yt?Y9Dnb%ti^(&GwYegub<9N|ui?<~hvzT&Ze*SeRSE zw?4g4t#Nmn1Jm5{R7Dm2g;p@ghv#kx=qQ|#pq95Q6pQ&dg?);|E7f2tZ8}4k#=V(q zf^OcI&F?!=U8|uaIHeR7EWu1vZ|nxRZn7oEdtCU6HLNT#TkQx(X}q(9^`On>Y5LV_ zKx9dvYn|Qt!f@5PruQ>elW>13*a~3kn5Xfbn-71?j(e zOk=)w*MicYB#z|Ch8W)LbmpF1;;OWfGio-#6fv!&*)twzn-N)VNJ)$t^e?B$TB zilOE!EB=4LVVj`jORplaj1e|MeZ)y-1JyZL`_3_Fq}ky7ti+Znd}ruLby}2SmX3%p>P*?=A&;|>jr~<2vkz_8ntt<(h;CUU;75gKLVtVp(P6Df zZPL&weY!=NWcC?H8pfZjj&|UtCNk^`e{i;De8_^+TNk0bIjoakoulkQV#WFp!#6hD z{Pax;Pw_}Q9Lv=~2IR7tkOLP;n(Cg*sZ!56Yy?_(I5|~QM*hQEH?mA_eT;X8`!Us! zoD=nlLi5C#s3p#EZlLM7lHTKlY^lo324cT_&}i!dY9crsm2%@p?L(zw61rsL8ejP; zp^E5tqe_YlU*tPbVHNjvbsZmkp8dH+4|HvXiP}d#yrr){`hT{VYiVdHTxWIDtaE^S zz@!J=MB{s#m<{H}=7WsP9`cE2Mc5SiXDymCvg^;sWaP)a`39|20C^Jyppf(>174`i zM*@~9K|)t{gg9ex4vbx#|0wnZzVVWM&LYnLD^BqTeYwvsX2GITISQz<>D6yPo+{EU zR)>Aw@0k765hJJOq;e87?)k~udFHN*33tdU348#432-}|^+&<|a~CEfYJSKhKN*XV zXo1}7=GsZU!Tk77`Q(H38T&6FB^WnVP%>}1?=wRb*khLnH=`#s(PUKD8?e&5j+tej zPSR$#XO(C-f7ogcwQDwQFtV65d&j2cD|0zW!i7XpHF%|3okb%*+}Z8aPlR^y8Le^> zoXw$dCBv_HalulGGYCE}fwrrQskH&0%+6yua^o~bAOMeoZ-IHf7a8OkN2bt4xmr^b zD}Prqz9Kv?o9Ea)kBpRHjGS$c4&9p$@bh&&33z#GfQqQ|6?0m>o1$fxwQ(Esa@wib zz3$QoXylvMSWz3dtNT=<`AnyvPw^$ZQ9S6;F5!7zdr;LXU)&h5wEiV~dILJT!nme4 zij>dTx(X3`y)+Ns4w}3~DK?V>wFLs4*KV6i&IG+AeEfl;E#(-Tt@UZ+2U`9RNrR6w zw%CZ#8WD+T7q627kOt?His=L`0y2AvUvh6jywmDh$X!-8fgREP!C;2(0lWP&84JM(H(1e9*O+SNz)%{jC+PEUx1(`>BJ z^d1C57jqBC{h-vsgO%oNOVgas?guHv>4YrEL6mISuRTy)l_Cfg4nGE zTMW~DWIj}`u+>OlbLA+T@I|Ao9g;;|T&gSMaRa@a%cG8a1<^^~S;d%vv^0S(Q4PMd zl~udr(Pi9Q_{48HnF-c!-ag1X=6%enGY-YVbKE-Mjp&7*8d7q0(fO!vv{JdU&?_#O zHQ3)|ID3^SP=W+DeG>z9j!kMJh7vLZnvSk zlgq@?-&K9ynf-_eu2L+DzuZ$Wcc9eqi0ToWOM7+Px+<*=3gA8)(1LoeRGLooWjwDx zzqwN$>k^M$#mIeIEz@F{8GnEF^Px|t{_nC_UeZ&7)^vh20(dM^Z!u<{65-kLgS*m( z8ZIq}v~F!_rPwd%pIhf39LH(+;(|cqht^Q>yu7ZKJ4qd5wpaGp&kx!oipyP{)jz$o zP|~tb)rni%+*o!y0Au7(iITf|cs*gqBH?buUF|~8f8t2~tL3WwTc+D3m|_p-iMr!g zyE2)%FB(@;>ISIaMvJ-_k}{pE>yL=Pw;M_K>gp#daQ3!0I5~a`e4x*x&oB@xvMd09 z$ojw#`|ebqy8$Q?b(lL*5A>n;B|xdeOoKWPsC1F!Fj+K%ceT$d{Iy^EC&?jLdhroI?&NiZ?6Sb9WJ z@AcztjNpTA@u@8H!2SS{(0Yq!lqA{qth}NI=f$0mu3S&PW(~%EW^Qmv0x!Ki!z!Jd zBt|2g4Kydw-anOZSAS~9*ls{prt#zTf%Hd6^M+&sF7th#!2H}0d#8t!t@Z4MD%Usm zwK(69X|QJ59g#i{zar?hN+V4ai(y!}at+)1O$oRU zk;yY?qD^%qH$|c;prZ2Sz58t*pYCzxdxcH}QL?e95=uQbqgqHERYN&_&MeQhUBuXV zqSJ#iM6%2lI$B7J;nnKh{_7?o*3AeUY>!i2OvMV*Cc}(ap*>QY4x1uBEEhDx8-PoU7nh3`G6?q{lZs13jaHNXi&Fun#u&~L06(#(aa&!ON;BMaVHU* zIz7dp+2&Z&z%o`K(3MrgQ_ygl4k^-nEy#7T=17a)hj@mSa1;mnihY(fp$TU1s*md` z-xs7W>125y{DYl*tu(8BeCd7m@skDk6i=BMmJqr``sE3ztBqJWzG)VS8Mp%WB>}wJrT>Dcu^sMu+Xdp2a+!&`9U_!`wSA(PnrIbt(TbtsYn#SJt!~;5N)eg*w~X& gwaicXd9Z*6>@5~e1C8fv|D`m>|C{?A{CDPG0Ad#l)&Kwi literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-6_hu_f695abdc0daeefc5.webp b/public/images/blog/blog-6_hu_f695abdc0daeefc5.webp new file mode 100644 index 0000000000000000000000000000000000000000..0b57554020e9c315f8fa2f79d91cfbdb675cf7af GIT binary patch literal 25840 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 Cn2Y!T literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-7.jpg b/public/images/blog/blog-7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13defa2beabb4d3f89ebeb205135875b1021d811 GIT binary patch literal 6476 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


0uc|a zb$85n^|FB*-vqp+WQ4Ksm0oU=X^ zMh^Hs0jHz*(_8nFDHMWDsTs0;Cvd)MkQ&>r{DnP~ewjt2v$!J`N+Wy*q2o SLnFJi>Elmnjv$!7#(w~ybZQ6y literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-7_hu_3c4ad455eb02f8ec.jpg b/public/images/blog/blog-7_hu_3c4ad455eb02f8ec.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d349259eed5bb92e403fce53e0d10313f74f103b GIT binary patch literal 34888 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

Zi9g1l=KF021>TRT2;Q;8!TGeDU*@K`3Gh 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-7_hu_a100653844898565.jpg b/public/images/blog/blog-7_hu_a100653844898565.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddf1a265ac2b34d97e4c898f37617501a2d03e23 GIT binary patch literal 18649 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-7_hu_cc5c86d0bdb969fb.webp b/public/images/blog/blog-7_hu_cc5c86d0bdb969fb.webp new file mode 100644 index 0000000000000000000000000000000000000000..a442d46b58d736396a0d2f24ef87c7ce35d00eff GIT binary patch literal 5978 zcmV-g7p3S@Nk&Fe7XScPMM6+kP&gn)7XSdTg8-cYDj@?r(_ebM@@1O8IAK(l4 z|MMU5Ka$^={CJ=T^H1wv>VD+CG(W@iH^c+^r}iKCp0szj{m1_Qum|)1@jv+enSZSR z+x~C;ckZvYFVTO`fA0S;@D=>y`-lB+xv!otVt=^5|NYj#Z$%B|j6lUDIHab~`Fwk} z+^)ONPs4GWj4xfn(FH*fa7F|6SW&jUvT ztdkluND{q2EMf*JD9`-SE}eB?<@H@B=4KMX2g0`4zOf}oN0BM(_>R3H zu7f9vKu0j=b(7^ZSyMEUoIdZ=P1~}gRgIK;G0=p*rMDB^W3&{TbK%BEyaa4A!u=xZ zGf4^o~kbWL>T$%r%?vkl4jJ+4-cr7 zwSq!L=k)u5zovhGQDschM*UJ5{ss*-Hh-ek-x;};qKofmpogrz+{_v`1LS2)tVEZ{ zncaaQt>8Oj1SUjRkS^{5f9dsGkn|6wh^`lXKE7F`l-e{E)i&lWrTM06;Ji8$;k3BW z_XMhj(T)<5f|8t4Q)9eA@4_T@u&f}ZM7N!yB#3J&W|CAOXIe88=Fc7Hr{#hX#TPy2 zr{#=5#U(hQ%BlvQpO!HK%!gAGXq-}0ib`=wPAGBGM9%Zm^2NhM24>b&%_OH3l;V<% z?5S>H?(@^~z`MgKDa9o?q^A^=;p@%(7`X014@V+ho zy+>QwEx1}S7=u9>aCuGT>-*&q!8epFDem*r^2Q)yl8lYynUZ25{}~;V(QDEFmUp#H z!igJra-V>|qkD-wC3|z6rGd!b#2cg_9^O$v`v90Iz#Tn9TF~AL%h^1ra-y<=OxL>ZtyngqAtOY+(_a?P zJ9j3@N+bSFRKNTT3E`)E=<2k+!Qu%k8JU(QZecVOD%fCb@v6ZFC&3O+i#0<&G?JWB zQ;JG)Nk*c|7k;DLWUL(fg8Z&U{OyaGaNU?h3{q2yN^wa}DJjJzIHac(l;V<`0092` z_9+dQW1>G$cMSN>F$>&>HTAMAlqS325zq7UeE#<0C>^q6?KR?Wh7Ux(l@@$fFW6X% z8*H9=;()b8k1S8hB9-|^f-L0RDPEnMsfaZ&RyXa(OpaPE^Y`8f0 z`u@0{Nor#)oo@%y9G)dJejQl^Jw082z0#sfC;ru(=0JKAv`HGAwZZvLYoWTHPLs6} zey1;<;UrA%Q3q@;;%`?7h=SI%L9xxzg0lA#p&UG*4BG zQdr_E5x5%o&CJvK4OuK*_zZS_lamw~NK#<#GgR`Jz$lsUk>Co+|KXrn_ zEj%~p7hxlYPf&EGqOXI`4FsHcF6DyB80`H^|1|ak3t_xJh*m5ctki}BlbghaWA=uZ z37aBSDCS_l;UKk)9EFoj!##Oo1aH}ogFyytyB|28di zZ}2f3{}vW_h)6u$%x^(dUIPpj#mTuB3xOqie1Z&evle|9R-WfdMfStnK`G%1X$S@% z4H`ILokW$|dIa6g-&8gDJ?pq_Of6Loh2y@<0PQE@9&cMv(Y=I-+Iu67ilI4Tex13N zDxUA<*L;=gdN)51DA`3Vop1__LH^T$p{xU^zC-4D@15VvoAQJYTLvDuY99}tKyS#z1G;B05euOz=MSG=r6PM z_Bul9tA2%8ye`NSfATb4A5`D*>6TH#V9-xuJi~AKfq{@>yTTyM*CaMj-r52tpTq$4 z1o`z|=J4uyR5$N=%ah4Lw804c?SH`Tl00(@Pq8TbEU!BogvhU%2w{MgzuJ0ETuxmFN9bB?sZU;$%4j z;Zn_6VqY{@Ub0r^F5?})bTGj9v`X&Fx+AD=1P*mr++I+N$^zdA^N5@C?5u!=U@}Mm zbSnsdXBtIOfg;%v;$yjVYTIY(qGH97nl|K3aaJqzqj_NyO z5i^~>2y>cJyDz^0Mpa0=o;9?%vTHr@?T7Jh2It{cfC+t4t5PrT#@8OhK^1ekZS1io z)Ghd&I$ryUDHbaWozp)@wn!8LX$6OAE&#_=XmUH+XOcB(mKY-7!O+@LVTk-8|H^nV zvBZ(lpvwM79+VfPZDFZx=4=$CM8N}tg5`2ZrMNKPSSPcYU1(@#bEDLX8%nYKeI9J8 zz#8OP+L1SsWV(6I4C6&so7YgMU>~_dE`4kFo+wuIktmfqXUo}@Y_69=YIa%FMM9;= zVV*ZZQV?awMsuA7MWw!X8h0$C5-a9H!D|}W<@6}-B3x4a?>~hIdYKFK<~`e1;czNI zN3XzHh+!=eaVBR2wwrBepYYu&AnV~0K9CAI1}N?xer_D&xc&<0HYBJk)!qd$a@xRe zvEq8wXs?CeenZANpWW5uf(Uw|6@?Gp<)d_2=;-~EaN{U9*wg=MBG-=Ln5VzEB{2o1 z8Ep7i!%tKA0x~yzX;!!VL0`w!3d~;Ssaow1IMpJW@4;(>537ds?5l!=-BOW#_$!f} z$^yXzspHDm*c7hI6FtbotxPYqi!0c!mB=t>l%Wv#CS*^9HhcQ48FXh>%Gm-cwmXC* zAzWyuuxnJF_(TdB>dV#yINfDoM^^4*(BWVVo($(~#6{}YTwr;Zaeby3jju1na(1qm zrFJ*6O;a}L+&c2^eu~sX>|&Y;k$c6+&vn0lKH+&Lua)cTr>2}m8#7M&EUCDf^wF0l3R7qszYa!gb^fWMU`;x%aIBb|X zoFoCIz`T#ke~|b27QVok()9LsMCgBI?ho)`kjqBDtkb9P6}%~UNXNg^N6MhB5$719 z4D9Q2iqURWZ@=DMSqS3(Smaas;Zm#sJALWB_1CfyVkfLF;)NS3Z#vaG;9-EMHoGGo zv`GJncPZWAl4P=NWViS3o-#rOtijJz!X{*+Gp-^(Wk-qXQVu`np4Rkb7N0};V z0oEk?3zW9k=p;1g=e7SMF~I|_4zD%(0~y6Bbh#6csU_o&a@V0++X@PP$s zw|$n*8ZpXa+`2pwD$ziqt;1RM?lK{-(0g-y{0{)UcF343UDVt9#}@=`9-%dUBIiGa z=y|1iei{>1Q){_@_gQFK=J&>msZ=D zHkk1b!QnneEMrP`ruDl+EpB$a$s;KYcT}a~>f@tmqh~>G$R}#7;Y4GsP>|u`v>1V~ z3X{R#gI&6We)(#_4E^u)IeOO6*#ugu0ohV>^~-vhPOhLyH8X%QwW*`>H{Y_Y;OCRJ z!894op4`74YE{g?pC<=wElT%Cns1v1K&c|W3{MllhH~;D+b59ZN9OiZGbZU5{~I6{ zuWye+YJctA)%9E46+vpOofWN=opuugfU*}Z@6SgKSM-&Zz?f-7nH^O=92t#UP|)=| z@Q02g08wH{a{^Y#)6^KqZ&-NE$p^qa`xLO-pCTJ=!0p>**2?biqkNX)Qzud{lJ@-I zLv^a8iP=_e_8+Dd9v*(!N2eGi?#>w;m+Ff+MDf{k#PFO!`XJJFvMgfK{|MUz>_*qm zHvGHBue36>7qD<7n!%ornN!kG?F85rlt(3&w1}+%LrFQUgSv_qWJ^v}p{iW!r5OU& z;zTSk558LCf*Fb0fwsPgY?uf%3>?CH$)s1H{QSD4=glKvcvn>ZCwHmgWzd{g7Kq4^ zPNDhVqk8x?7I_K^D3Iswy|P5&=|hWKE|-%CEC(&+RJXPA8#h4#Ig_#pTeq(68Zd9I?Dc~}a9-+S816U|^|1~<7# z-$D(Vs!WDeqo?q~4VmX9;t48Ll+-mr5TMx_{>ZD{B}*}SDO5WPe~AVec!?noW!M5_ zmL~)fHMXDBTVr6_#&*)4Tu>%x;suEc4EyW7=gKKl`Ipkhn^SPaTJ`z%oo;~P+)%*b zZ8rey#QL=5oI&S`&0Y~E8MO&2YaCn9X3Ce=LhPz&1H)9p)T^jzcVQP8 z<4QE6R*xUAY0O`YgZQ$qUiUs|p%Agt-0Zq)NRw4=k8~rGeaB)Y!VmLs-bu-fkLzP? z`?IK`l}Q+fJS@Yf$}y@YDRiqjM$*2`Gm+Lfg%3wh{v7u#E%_atfpC$nq!6w&3@ykY zCLGp>QUAIj)6B&$Z_=V&@cKlPJx>Q7^rp%t{_3x#LgWZ2Zk&o-vT@N`gKw(JJcO_) zQId@}p*q$1BxC+)5tiMIKa>bn465=bB{jmUiQ;P_PMO2r++W2?l^3FmsIJXcn}6eU zsn_d2+)`W)%+ufD%}SHNhc_*&gX9C#z3R>3a7F6ypfZ2w`TkWLPNPqSaE8OaeI9SrK-S zG()=_>JAtS0-pv1`6gErB`e|kMnF1$xL&pyoFUNR!ceO&Nb7N0DY>cY*oGvmlTEKx zzvZzszPPB|5u);rr*Bc1#07S`Z5Be|;4k{Kv82 zoBW+tg8E=#U{Z(QK67Aol$<+H{-@h-w`Yd@EcxTwQ9nu;rs%aohu2`OItqgeSxO39V%$_p4!gPFPq!P@mLcZpcO zCxNEBU`fTPZ&kR?rdr)-G6kWWr~XXn~TmR)pscwM9dJ5*hf;EvgAG*_=(h13Q3G2eP(0&8D-1>n}-7w8wY1_Kx% zYTBy=e`iA4V7zEIQb$jvd6bIYeRQF_mu;V(taqhBK<1Q!9D+$Sfl|bq{+TaOp564VenE)es8Lnfj z4GE;_Pe%5*9-(bCQWeFPcVNc?+$3|F$*M7G+Nhs5Y!vT^?hydPLiW9uCgUUjx0L7W z4%^aZg-OB+aGc{lfcCip@LlGbf{Q0N*YQ&@qKf}eMaYph_)1S>zD@aO&&d^0RQvz; zX@gr;2_$A!eqr=AMDt;9v2Y9+w=xp3D;U{>Z#j%gh4J~f`zwaR{^>ICDwkdaktrZ8 z>KH$ZxYC-UR?g;ZD1-hJ(u!ZPrgvtGntB#2187!HQ_EznVZUG=x(o`hk8^iFKzG^M zcuUF$nw(h?0K}W$h7w|aGw^c-?tem=fH4f$SUVxMW}R~j_wQP$-U?OCMf`QVSR!N6 z3Zem3Ik}>a%=J3tbV2yHS5;G#2GKm%!aiapVZ^|4T=+#$lKzV z9I%VcSotj}2<^Z@f_vP@XZ`&L{|aXTTgmB%_fSz>CEwov0J1l!sKsQS z!IJPn=52we@1Ion-xJ@XM=Rx**=~!&0iG8_AX7d4uGFo)`w+i~W(*{v_5(SdFa@iU zLBTSMV~aRk3DW-%+GuqOTM0}UK}vA{F;>KKrWRN!FdF%lU8AKYSMwwq##Dz5`BqwM z6lj!!>uryFLjHHs=RY`jytZfe-&V}tBpz^|pfsxb75gd&u(_2k+>N;6e#}eY`k>3e zrwM(J)4SfT0-vP}y^n=&V|kx}Z#|me3jSIVom!5k9R>Ue806sksx_Bm7k2C%DNZ}J z$R)RSocAQ}R{!cXMw9IX*&a8y)Tqxr?y1We`G#WoSUYy}2KE;!i3zvV9?`Pl9^xFm Ib^rhX0Mi${asU7T literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-7_hu_e1c9231db481941.webp b/public/images/blog/blog-7_hu_e1c9231db481941.webp new file mode 100644 index 0000000000000000000000000000000000000000..0e255d2a9dbe008a540973076c640f3e7655be4c GIT binary patch literal 7162 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 z zz6FmPdNIKt9fHD381j9m!=TaB1FX@ofzFx5xai717$r#pw0{O2LPdy}lbtqh3>ck+ zuX)`u^EgEJdqzVGMbpBn(*5N?!HK0{>l=i~#0D8+BES6f=!n=LUtlzfeDP<3&CNn0 zL3=UesvLh8c+3!0F=6~qy(DmJ^nhV_aanRxzfYg*1>EabW@9KcpM#Pz z^lzD_VnkGLK(!oWGPkz8)Gr$uGE-;0%@#D)CMw_FW)Ry$Wa&l--(^z3pkf~Ip_$;ye#(-<8;-HP4tK|mN>71f=-tVhT;n?C zxI&)(aa4>x-Ltz#cRPE*=2iX}U-`*uSFm$2HpI^FBp{4`1HnQ;r4%>)M3?B$KD;kX zNgt#C_Bd@ubBJKGwLR8wIogyiPPlW;7zrIg`|NsqlDje+Fto>QT>}$sLR=iI=PfjD z;b`FqE@~hEZY@xcAN+ot&4(yQ3uuwD5ruzj#u?o1$TYWAH@dFS8OHjV)C6ClKsF2d zj!qZjcvj$P$1`bo5PA@ykW1dp2_nIimD~Lh)I!*oak_ZH|P^uO72cq+JXsF#v6s47hVS<0Co5^bQPt5wLy> z>QtRYd)Pw|k=#cIUy`S*Liyya8go{Jyr&#aWs;x! z{z+VAaqZYIWP1*S5f(MNng+j!Mn2syzO+M-n-@fH8fWj6>b|qjXJuowfalOHlw)HFN(q!I^2yMS8<_k*dIj%pdOdgkZ`GY-~ z#m(hS$lnxLnUP-sN}jPbhF~JVm_C)cy^X_>&Gc-i6}pX>Z6o&vi0kpqjL;Agvr-ep zJRP^38XEV*2mV+)Mzj{W(ugE@aN3HY);q3*W!mXhG3Z-oG$l{R${30xYq~Qp3y?~}U6rvxU?}K;Nt(b4}Ot;0a1MSGF z5|vll0+~BaRuO^)3bH=^Vy18loy=+16+N&u78Avj|6l~E8Y5G-BW3KdRD9~kR^3n7 z^S>#hzD2Ucn#(fuNvBnH;BfX8WNs!Z_5l)=dIbuji z%qljIEW=|0tOz(Ct>n{p9sb=p(x2N_(J6iTGjJE51|O8l zT-MYaBG9%$yI&NG`qpdIetH{zZ1smZI=-33oeiN^ce?o|-nFMEs zCk#`>)0qDk8avdDPT@pqqGCLfyQT@51Cnd+IyI9i zAac`7J-gD@DbqyBe&kuCPd^z$2d4FuiXh$A{quNRz;ZUCiCAR$4q8Yp!9^^AznK1l zIj?Q(VOWoY^@pw>W1ZG&%qpLd>`pld+P(GliLn!!@*s*_U32?VNzT@4SNQWjJzr3sO>fv9Ld!dxHkY+1@QCMDh($ literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-7_hu_fe6a5eccb44e6265.webp b/public/images/blog/blog-7_hu_fe6a5eccb44e6265.webp new file mode 100644 index 0000000000000000000000000000000000000000..98276948510ba7b5ebcb63ada381ce50352a396a GIT binary patch literal 10414 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

aTqHUPgu4 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%0A6xe0dqN84N?;=QNS-X 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-8_hu_877dea591168f6c9.webp b/public/images/blog/blog-8_hu_877dea591168f6c9.webp new file mode 100644 index 0000000000000000000000000000000000000000..b0ba81be858ea28f68ef872ff18e801a040750ff GIT binary patch literal 16712 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 aqL2P?u9ig)%M#GXxx<_L*MC_6!2bc0Y_B2! literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-8_hu_8aae514cbdf57851.webp b/public/images/blog/blog-8_hu_8aae514cbdf57851.webp new file mode 100644 index 0000000000000000000000000000000000000000..a4056c13169c837e55e74dbc6e4b5f1032098c1f GIT binary patch literal 29892 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-8_hu_aad970f07ba40e8a.jpg b/public/images/blog/blog-8_hu_aad970f07ba40e8a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..582eec5cc11d2dae62f8151f0153bc6f4159bd47 GIT binary patch literal 44448 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 Jjpx_<{{y1`S;znY literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-8_hu_bc03a607701d5da7.webp b/public/images/blog/blog-8_hu_bc03a607701d5da7.webp new file mode 100644 index 0000000000000000000000000000000000000000..0ab9dbcd157fa739ca03af1bd19cb26f0886c20c GIT binary patch literal 12256 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-8_hu_c5615396480723ed.jpg b/public/images/blog/blog-8_hu_c5615396480723ed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4611eb80e87797de8b36c323135ac7b89d7edc5 GIT binary patch literal 15232 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-8_hu_de52e2b1d1fcdc3e.webp b/public/images/blog/blog-8_hu_de52e2b1d1fcdc3e.webp new file mode 100644 index 0000000000000000000000000000000000000000..d03a334e4c0a6c73948d62ad7f3329cbee7e7c0b GIT binary patch literal 15960 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 PGlTvE|67v!e?I;nU`6@a literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-8_hu_f7b5a18e65e50561.jpg b/public/images/blog/blog-8_hu_f7b5a18e65e50561.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bb3b4caaf62155d995918c60f21da78054ecfee GIT binary patch literal 35916 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 Be=-07 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-9.jpg b/public/images/blog/blog-9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cf88fe7682e5e34629d51a9c860d9d706cf0444 GIT binary patch literal 75718 zcmV(pK=8j(Nk&G#CjkIgMM6+kP&gp6CjkJ^GX|XjDue@s13qmsl}Mx_sj4JW%Sk{D ziDhd9DTF`%*aJwKR(~B=&ht27kctwF{-cEflJ;3TH3up_WBq^r$M|0v|BUc3^v~{o zz<HfF>pZA`rezgDP{>$KB`Um&F`yb#(#K9VO_>WFOYBml%Le9Sd zJ<_~k+AdY4(?HN~LIlhUSg4@5A#4@whE4k+N5#_&3_6}ow-y`$Z1#e*`emQkiO+e! zc@si2g42+7FNe39@;0ocBF*EQBh_dy>P>(5sAt8C>BZ!S?Os)epR?d2K7Gv7Y$P$r z!85?+b4lwH7`B|GAAdE+3Z~hegB$paXuF+LTN^fL%kal*(y45gTF@kqIezIo*;)iz zD>TV8RLL$A$^e%@qYjMRg06Q9<){{#|E7-(rqPH|M`XQ9VK5WPq+E9temzf1ge>6d z(0g}^MkgXJ;9Y}&eTT$P_a5dY3jJxJBVK!%JAb^Q-T1n|H(&1(xkT0nRSbaA>?hms zpS$aofNviQgie~X$Xn3HGKL?<%I9K3(FYdn8)lXudWiu#?6T`gBu_EA&N|UdbhAI* zQn+IX71&8jjD~PlOxG}n+H&9Nie5o)SeXufkq!@wI)e8Fx<}m*Imxz+mwGsfqqXDs z0GMXFIKfr|`KElD=x%DYN*H4}mcBlDzmQE{SFeDjf}n2Th1MM- zwnV(onm-hdg3lA)jVh(D8cBM84TNI4?v0J8SPM7htU4*l79BK84)*in^BUsZ;G!1( zxgB|LewV^@&`!5dR(_0Vz<)|f)Uk`ej8&eg$q(^##rCnSC@|L*L@G#r;q%-(6VeZOW32AP1ZDZXdiERLYa#Vcz)%7O)}MsOnkgHLo~5Bv5_ z!{I7%Tyy3g;p+n{p-mIJIREG4M^pCD;|&mIg}5N?xP4S}Irs(|0i@N-P<|)?R%!#) z-!++iS)6`!Ktpm9(k!_b@F)l|9$81+8Ugz!_R+g3g6?v)dCp*R55uRm?zoNfjd@ow zOT0vQ6fgav(#Nf{WX+fAQyPI|+o7AYAiimi2^43(2431~Uy>`cUXu0w8WR81woTNf zKnnmF_HyT$k8$kg9xLyUJ}l+HyI2U@wR*~v3BC9l%-Y`-bp27s(esIEJM=O?aw>~? z>?1P%l6}a%O*>JpTV0_l-Zd__w0r}57}?+am=li!I`U(YPx;80oKi6rd%Q9;PP)ib z3U-Kobtj{2ZL^25Tk|y%!}U>GwT`Szz^k@wmROC3Awx2<(PKl^4duku;U@=i=hNqC z;wq06^9rh)K~uM~VO!li>=x4~3+^%u_2+6=fpoyC?C5!({2-7)qX+{Aj2E12)(&xu z`+9zRO0I`rWHhSIg~q#u9slB%|B)rUD@UB|YirGbVa-9NnZm&7B{*Bi1;)gw{~P`W z?b*RswC-Uq85Y;>)t-&Q0h6cPu;2%Xo6T}L3ChXc%8cN)+C`YBEKmFY&`+ZepI_ch z+C4@`+*enO%vm&WJ}m7lfA7C7B}X} z2d~h6tN*0>#e%PYU@=)GmDrq-)uqZ)V%%$30)y31oMljXy9n{-V6_~v`ICqON$t$K z)?VN6_Bf}heJNjfyH=g3gm|Aqiv)S;`^41cvtq5AVsOf=NNpk#JRB3PmVQ6~Kj=cFoo9NHC(-^#8xoSkVsTc`0{(O1I$>vmxH^R@P(3yhu~WrbYiaz2bf1KGp%%~SuL^2MEXcL#O> z)&%s;ZeG!x<0Y|*zBsT%3~t*u!^2b|W*GMFzPCSWB#K~lU0c*g1usDF1e2+dzUExb zE!&!MDMz={Ev+t~(ULtfyzCw=YBtUU74EIcjH$jx@b#i55ZUx;kVj z0$DDThD7SUANt$0#(^)Tru)0>Z%zzH&mZ~EF!TSI$14h_@q>DOmLq23}Apa ziQ;SNAbL^%us-Xz+j}nSb%EODKEgF%jG%D+7*yloNz0*SrA5C6r2k-oxswK&!$q<8 z=I2>LoW8bh9ax*(nc0r*xYr8z@v{J)B&MBesuxk6qt95FM&^rDZ$o82G}l-4ZwJjS zVV#eS-)*@Q%tGB*e&(OxA1dWF_9S*0RXc9bh}8k|xAq0VP%G zc3(%r*y@rQ9rmtMTpkX&J+uE>dv-IP8+VOJv8p~Y+Wx}{XrXuZAl(a7PwQ&r}mfm(__Xv6e20QvR(D!VuK#B-bC8P zE543sXM=yYo_4*Gjj^udypNlf6H)~s6NEeE{1f;}$qh72FGz9b4Ml3@ZM5Z)N4f0b zNWu_w>#Q(kZ)Q5$?fp32UP!; z0-ov)Pxp7`e1*YX2We>S7Xkd*vS?X%k!Q5EfwR!?v5b!tB7b%I^a{<-QRn?raod2P!HneDy8sJCv=()%aKL{t0tAcJZu^c)B zUSW()+ZE{dw^wLV%|3?*NtdDMzo&x$-j9Cpr*6fl9b)9gi{(2&0c{%WZOM}zCo>5o z+k^6-GC5DZs-L3nq_3p%CM~?iF&vv^QKnE$A>h)~8yfWeNh4i#n(fqKJaf9~sVg7< z6Wjm(RT~R~R8;Pt$8zKR=g*Nn5y$^N2t^oAw~A@>ZF+0Kyt6#$jA>^pN5$4LR835f zKnyViN3}mw_i|z9jVC(V34450bI&$L{v&O~lr=wF4tw?I0w~|u zeS_!ti2u!q8UH>mIj>5nP*`)^?3TwZ1v)$rFNY8-3JtZ;qA2S`fEMOO#O%4O(WVy} zi?{m8mL)fDwE>>5cw&4&c{h4sgj_03KA==_0;ob;<8%K5y(YHv#&uRX9lLzOzECRcSj0jQ0ZMJ*tRN|7JQuQ4A$S(PoB!1C@TNLCv|E>BrNdp0_HBbGA2 z8x}+sLFe)q_K?I2YXATFB|Bakb^YubDoSAM48^fASIZN<*8Y2N5RNpI6?no7xerps z^L!fCY-GOcYdZ3~2Id!o+k&Bthb#YW@4wtHWCgrj24En#U(zA5Y(@=^AskV}P8t}7yw)_`bpRwhZ_U&+i3(!RD;KWinw zl9^U_E+vFc-v*jlfarzC6Wffv?TMg=oC_ea+_6AjAl&bC$x|=!y?hR&L;cJ@_Wpd! z^lvuhV@-Kn5<~F6UK}2&PzFz+!JiQK4FR%DUGkc4j<%ln2 zGvmwz;L`X>+;B2(cv!aS$uAfF)uZU-<6p}{UJS0f^RaV2$Wbt){j>H;oK+$Uz}G8! z#m(EWEC4!|Ul-o!svt&|jZ$B?`r(IjE;aM3NMTMl3hluh=F0_e=Kn;Es{I3Yi;+P% zA5zi<1?!COO3qP<6(;9UY7VWlF>ON-|68Bk*_a|o*=~<9;#yzuGB-kUdM1&1*E{`C zb`h{IZq?yG?!*jj;F%*;JggJ$LUird319MYCx;mcQv@eS>LJvg29Bpiz-gio?{W)M zUayN>z9ySiI;ue!F*G(O$%Qj|hqhHj4Tg|UN*E18UQtBl(gHC1{KnfKom+NE3C;0g zO{*SCmA%|y4ZRQ1oXJ8^{Zl>G;=p<}XFVQ$Vc3SbYpMf+%5=E>2{rh1ID{<8camjK z<=*SxDrSXLTS6l$&bb{Fz`wY(|6EG%sH@~>+VlZsGRxvq%A!n8K@q?sC6vA2#F=d4 zrbitxvCRUaqMLi2nH*D9p>*pJ?N%V@GQu#lHjaLvbg?;|xGT(j${qx~b@iKhAURd5 zG38uisv-k`M3K;~sSR;-%8A}623-{2JTxdYc1*1)B`Bk5MZKj3jh(nsiV|u}HhmkS z*Z$mcgKg%r?zSO;mRZ)a1Ii)YW=^#z@6_-nE|l*28f~xoR#fe_ofi_)0CmIQG1*?m ze^0Pky|%;N*{EmwO9-e{{NFtQ4kLk?X*;$j?1l~HD+keedzJX`U16A#SVep|zb99lNl*4v(8mjY5OW_# z9y`G}-j`*2J7AS}UlDm5TYD1?6yB{iFT0;G@(Y}6C6qt}mBDkgmK?7>w;XW6KJpOj-GeoJXAg@66xpwXIvdyo_cfw8C?VZT zf~l|Hf+K$?S_hNhi37>tgxdBT)JbAK0H4-gJN6QS*JR#t9Fe1g_Z0i9JfOEdZ1Z%y zvy)W>;N z`~$`6QIO$LsuaoQ$_Z}z?Jy?hU;HW&VS*$7%XYoaYV?TGkMhP1o)YFcF>+GZYip>}vbbYPt!KB9Br zw#t+|^9=J2bk<`isM*wRl|cgHLvGhId}6c6LUQqmA0|%|xu*pu$_QvXpc#IWyThli zy<%GNy~K4Q{L!IEwDCw8lRR2Vt2v{CwYJe>#KK(HQA6h;Ad`Qk+IO}4!hW@yJ;(pr zuUcs9y79I5gz$(uGmx839mJI9FWhH7ywa=9&F_*t+@+gV`+?0*@%#mcs4`C~-4HgQ zn(5H~1YQ4jIyFV}fNB!&iRH?X{I)vune`R=&puF7c7X1`y1qStx0~yPKrJhIk!ZcQ zrFo=EpsZ9REVOghf!o!DOSN2lVJ7$=;5@f#@!c)1gArc3xW%j0(NY7`T%i!Xz^hi= z0yBX&J;x5V;Vm=8a-hH(QzFD-i6WEJH79)DeZ+uLjmD+ZWx?;-YjMWFq<^o*Mym2B|#j{%s?0X`n;^Oo%UXz1sSI#u$a>xq`}{M*&dBbOGQR1pYR}1 zbR3#Qr}|%KQNkra0X%CJM+$hj_EI)tR6<=(CaorQQo{~o@A(P%)P8+KGH*DMBRF)Zy@b%fTa3ri%t8dDT+AIIFal4{@&#Rj%kh(+n*WQ$WSTW5Pu zm~mH~**0qw&z2p+n5qxs&Z}A(r5FD8p*opL&6MLju8_yoFr?o0Pa)$lTVa#>BviLF zEVKH%^b>~@{lES63V)d;gpa(YSov_-2B;e;*bj+|pCH6xq_&y9i?L#^>W?ZgWFN;R zoHsGB2-Y}9Elu%OMq**x$Rh>C{d0jowxC0_Nexbxk1wo@DtTPfbX?|$@m_VjO$*O6 zazzFHAFNmfVdn&$=GKBMLH*BLbU7&c{xZDH8{W)p9RI>J$oxh(6{6QC-Y=I4RB{Q1 z){`<+Wwp{~AO07>0e5eMY+~MhhV#N$*64aH2~S~YKFSD!L0Luu*c%5d7Q`@YNi9UI zimIWEA@|DXvfK|MOR7X{UE%m9k*(ZTx{Nb>#5e9x6A3?b0_)r#3I;M+v*f2rt)nid zkaqksM~asvJUkC?f@joZ|Miq?rmcVNJomdt3O||cf~hTntn}>X_)+(!H*_P}&5BqQ z>U5a1rY0*3%&^Cw1xr!51Ygly8WYYW=yRlC3|iWSxAN6&SKG&YO{?J|S zRC(_3p1iJUdCo9c@$h@iz03EvecAmp4e*{*w zkdt|(m4pi@1iR^ywChU|pM4DoEni9GTv>ECSSq1)m1>u)oNU8YiP`;u3||*M4a=m( zduE__kN+%`H@%#f;}dCoa(#6SbBp3F_ulL6(BA@D|G5Tj*8pgVb&t31L?8JY$EBsF z!BrJa{Z~ku>%pFJS_K^4}$p3u2sLS)7-V})}c$|A#!8^MOmHR;~_ z(X04%MnC{1H+mR@aT2rFM~o{NOC`loB!^H&5Fv@DW8r zWiTdoaq$#j4`X!0)=}HJ)>H5ZVo`;6t6Cehu0G3yRK4mq%{$L11Su;f$78_Dx7vC1 zu2A2ixs?vd4qF4^q zLuF9M0$4Fy9iA%OiCzH}AN5n4B?6Xr^vzXB&nFW(g(hzu4wD$Jc-HHt%|WJPe(1RQ zeV3rlM1eh46&Y+Pku$@G+w_#}NO8SCwkaM3dH|21Vc>V$?Md@yJ-dDM9Z@uf47tfFtiB7`IUn? zeGVrh^9E49HX4q+mc^Ho2}J?<#C(bFc=Mr2qC%YpsPbYLxRfe#&Mg%1mC9^v5qQbd z2mGcN*cUT(`^d)Q<`bP>Os3XZg$Fvk*ji|uOD61_I#+Sq4w+CsVwKK|$Tii&o~aH0 zZ33K;eNp8@dnr;uc4$bNsIY1sU8*tr5RiNkI)C|q3xH&#%j zrdvlglZB+i?GbBY#Q@f+|LER((_I!QuD3=Ko|e*dYnKf0YHK`f;Qp+zmQxFJ$4;RdQWK{XaWBv^4x|e!iVi z_l>MIzSK(0*Xq()KOBaVEGG><8WpBU)V{8N^}>BY^CU4c1eCa={t(Mz>y}x#my2)PA9K>y)Xr^Yd5pZB^O(rzsuP z8+27S1~rX@s0Oh2huA3I6uZND^lO zi9cYu6l0(EQ3GAbWqm8GM+(8HGq}a^SBcGw1qBp+m4n{xG=D&vwC!445s~PUeg&23 z#BDw+5K%0~F70>oepTYAC372)=H<8ZnovRN*`tv(#`CQFT!d#4!PZt$pDY_0A;pHs|WoR@n1yDKm(51PfJyR}{k@DqBL^iE{4Py~ z#q((TR>DQ&XKkI26}le9FUE+IYcQ?xH?m`b1w|=J1e(N_sW1+Yo7q?1QvcJ$pkdlG zqpe*PUW&Wn(+0Z{@)wRWxWB_=&;REXd(*g| zg1SGNXV|5N86gb*!ADiNTdfo{{8ax==K1Wrs0;yK zHwr%!%^0Jp^nn^b4W)5pIg&EDX{p%U6|t#2Y*5CKpwdz%&JNHEQcU~!_|Iw9)QWGc zyMxbsvH3`BqCnvey!?!S zeA`m+%bO+xs^4>VUl-Pph>-W6)Q>Utp=x)qs3X$&jbZ24CmXGOVQ3=32ZVjZ-x+Xl zE+8CQG3#5j4GE6H9yz0&D3do!r%14snZ~4-PGdj#=4mCdLWw#h41Xu!a;DPDI}~?I zLD2WPDxd5_IwE;*+aA5d|HJ#_{_z8^W1Nh>=u~P~+7)P1PGQ(v3gip5D;<3Vb|_gGV5j$f zM!K>+IhOzQ@VtQ~c^A5)pK1rsVU=ijoK`bc@FJ>+-<(8tVx! z#coJoybsvtge#6#N_5g{HBKir3_?eiHEYlI;79_1IqmfWPwjC$+#J}N6ch^;d=?$} z#{Z^5TA}XKehqtI2s|Z6{CGjcl>zNdK=h`RNeeT~y@OcsTTa2G7(w&k0rHBLzJsC8 z=M9wcQEFi5YCDrC9Sbip^^UnaDIFj%NJzD-eE4L?>u*YO4TTMJjc$G=_*q)*tmu06Lb-uwiEPf606 z_9eDz+NZb95Oc;{Q0O(7gLWbz5GPIl6l=NGy&+y9#KAR5fX}lVkQP0>5xsuJOi-k| z$U!r)&ovK0up%(EIjWbC*1%vh_{bQy=>ryNByCoCvHju(iL?2mIlkM#W=Y<(iZ%ZUh8X>ec!U-em)>|PL_ z-Vr}KU+3erk^gBsk6DCK?RKDJL|76>%R9N@e>VvkXs2Fd9g#bks!agl;y!`JbUD~& zwo%K*mIrFau$x+}WTS_U2WVf-72H(%1jiPvnJVDfewuQySUFcPb zHB3TmtT3N*^WpI~?9nI;%|6;{xvi7P|Mo;d@sk5$2R-mzR}we+j{#%TD||lk!h4M}LY%vVUD-c|>RbBN*Bf%I=AT{TAoxE^P26z52M$3EDXepY%6`nnQIv+*@MhkBtrV&_csNxqRe*JLPK&7={( zj&WQx>m;N#7u=pgtdV_Qrcsx>bR5M6xe;_s(Ie3Z)pM%gSpmf5i7YtyVIx58NEqnh z&*Q5dwb9!qFbThk;_qjjY}Pj9(hhheG+dJB6DIO(RAGtHje7_dW!n(n859u?)m#|! z8$u5<4i*I!CSI+PEN`B@dNEO^Ij&-eF<{nbd0EJzh(j(v$eA&J682lr3Jy%tkLkhK zEaU!<>Wk%VuKXXo68U>M=KQXYl%Hwo)dOz7)vnTD)To8!%!RduLK3}oSwP;u=drF> zr?8z{h|PM+vt$ElhA7Hcf{{yArExGyHNI$Sz&T89^>rG*<7hfaq`Yqu*R**M1G5X1{K$p!56<#(2n8Z$S8HgQU99b_ybr}{4J*cQ9l+70aI9!Rmbd+ob*t@jn5bTgK4j)@ zd%!o!dV_>gM-1>mtllQ(=NZ}hNhO(-DS_xE7mYltKo2$$J>Xg19Z91^E!MH?he{U& z>_V_eF_WNM;a|D_SPSBjz+cSX&N&OMX)$cQtd(fD6O%F0V$H zk?_~G*T9DWj(P!QAv+rs={F^L#LQzvNB`Mm_7blZX;UB}a=SN$`@zvm1$qf^6}DY| zefqX&35EqS=ztQ5u#oeBCCL6u-BMf zp`cp7vAhZ0(^rbBYg1$U{$kN@aRg!%*%($H{K^Rd5E3Qq%jgQ0^F!B%`Z_7ByP##KZ zp*<8j^Cg{|uO}-~K0S6Ki-ibILx)svQWU%N6@OS`YDWHA#50KGJn{-Tj2c@9(5J{$ zp~4^2#wk-BGFDR+RD@sRIqw=b_{o`LU3Fx3qFcN0gtcMCU@7yIn*v!h zp6Pc}P67tH)yylDG=1(SzaT@!R}UC{;!_cXi*Nhm|F+n0jIt8;s<5E)zRWW=F`mV> zOauA;q0i()hEi5Mp^iV!WlO01na7$Z!;N#0{{z#f78lFBMC=S#uiIW9p!{sr1~A)G z2+?$-E6rmKsTNP8#ClIxPSFF^O$5DR{xCQ#hE`hn%EIXFxahqk?+??kg5 zA#~*=*&DG63reAB#sQ7O(;1yOdMNixK-_lLSs*mRq`_^OacI!UzVb(5t=1*jOs%Q@ zZLTDC=9U$%R$&TleqWs4BkD9=E<5n8wE6fO5}+e;H_kzgTqRj1JZJQlZBMM1o7#V4;3l@ooEAE{cn@&xl2uO2wu9sg_Ry zpb97j>yB{7gL>1|Aik&P*|BQX=@O$rjJusrrLy4#v_eU!M%{~gv#J+9BTkRGSxIXG zBa52F@QCTeSR!g?8SE|pb=ySfy9&MjmSEDm#BI3@KldE#th<0vg<3lIS4^fa=T_r5 z$|P49l{(m~=McVTbsLM=a~F!{mly--WG!T4FUXf8s`TS|PMwYe`4%Sv%@3pM4G_N; zyi}F$zr6fn=>MTJ&{7X8XC5|DX3*=dpA)wgRr?~@MQiJN%a#WNL`iyPY!0qY&ur(v z-Cqs;&ZYSI0)D-DR7%6*N7cA&-x-A_Z|=s}K0<)v!BTcvm#JWB`wN(smMn&Fn(2sfL&Ssh zd(EGeHUc zi%ro~=;3Z;^8tZR#9U7mJD!!%y&Tri&vbqCzOi+szKOB6oeR?Yr-#38O9uv-F5b=J z7eHwbEKT_tZZhTtQk{KvCg9#g>k!XePXesC>0YIR3#FuriKi0YbM##SiS?7C{;S~U z+6VLxd`!qGVioyWX}$TbF_f!^?;#Cck?7uI@z19=M8Wk-I$g1Y>UPLxN z37T;c*Q`2Unk5?t99|z@VXCqW$mJ~VZ9AD)0m$P zNDYAmD{beNL>9-lcG1@?jzY^4pnj!|-HRQF&7^qQM)%r-tgk6orT|)dI2q(vS)MnmphVSLYWa^=-cZ#g}5!){z-2%Kl~koNu7xB&v0wH_R>;uzm;LoCzF)SvNuTv-yA zjEKJZ1)C?wDGz4NR0|(E&C5n;Dvqjr*PynsN1SkkD(;bnVd=5u0eL)${!uEs`JJ9s zM=-bQLI6IPElv%ZP>|I;{47Q6hqf(tzpXb8Ti?aI;TdiJa#mnSA3XLd*j?0h?q7I| za!j{-$BvA5V!;Wv)cW{xaM3rHpywCO0#G>}9a%xP+kblDge*2{o=ofciOit?p1=V9 zYA#${Z{{k4@n8P|^|$ktRG^o~f~tt0mDda3C=2{-c4L(Uu#+7hVB6YQ_gA!$DQ=ee zTJ>-_2O!<-R)=Abu3KLdHA_W`T^=afZDuKBF@|fvsQJ{91WW=~0cp-kmKq}-(f6nt zBPogu(*fUszH7`PY^Xy~@zq zp(O@XPPp!AICHS!QO|5C1Gxxa!AChy;sVgN)crG!8Pt{&{p-6N7~aE-***gtV|xpe z%0M@MW}p%V@gk|)yg7@YdloLf@@*lBY>$~gx>mg$oX#(|ablpfw(K#Tg3!cVd z?SA&nq&v2_NRXHLuqPAcEDhW9WbQ63Q$Qxru|(NDb?GrXefToNI$py7#DFiTfbWhT zr%M2i(~qP&9*g$NIKg*-4IxM^d!(Xr%5SNb^&Q5@{?Z%>=t)xwzx&Mt^;qw2K?d)TFtO!L+ z^zXc~D!9*Kju&>sKXp5p1}|br6-FGC!wy|k`5yNMqA@U%sU!>U;>_ZkkC^Gkx-Tcw ze|W_bqGEdvuzKxeQJ%-Y3B(tzd+-dq*o`KAkF#4S-1FLpsh6Z*uh9=0A6xntaLai6 z)Tf2bu6(@lxpu9)@@0R~6q^4#lN5ch4)Dma$mBR{3o+QEcx%0J8MT4HNnb@NiJy;~k|rPHcj< z&@tLo4Pw(50zB*+(sJwhT${b4j3Ro9p$PH4jt}YyZ0MRcW6)6J}CF4FsJ6XU7IL?_4Y@*aD6V+d> z1B}gw@uFISwUe4ZBpfS@-5Q&HB(p>L1yAaVa#+N-4TAzE)oP++ulc53G$c|D+LD3# zNW3!(q^BA<9$I77!7qs$yV`e$Nf2uP)*gfSaN+fx>3vlh$`AcqKEoFZdrj4-=TdSU z+pp41>F~e16Htvq5Zv6Qn$)OV{4;Q%4jxFRUum!1Q6Eo&>1;3n%A^Sos82KZ8{PSX zWHUEpi)|>jZOekpjOsK-&{wFhZ&3A!cVGnGho&XE6H}s6iutp?{?h;401(qXsT$7m zs@hM;pKj=*Asr)V2rl)UT38?=4wc%S1u}HmI3F8pvgeE|g>RnNMURT3R*e|NVG(J+ zXI!#Wt__eCzQuNx%o8~5o0Ro(^d9uals7S6yCJl|(B?5H2oO17GRM7?danLD_0>oL z<@8he`Lp9%CRXwxGGP**nUIQu7s6;w0$l%uX66?_b1Y<9={tLWn?qZ+XiE>tR z5 zM#7G8fNe0-%7zoera}&FF-sCElzP+VlC6>jYbuT>e zEA`)>M>@hsswRThzn-2k-Lm=X=Ua_B%#^9bYC>#FOoLlS|NPJKL{qXlYR$zPAIOA5 zROEltw;ZD8tnQmYJ_tJOPVxT6?F-Go;W_w1)~>scI?&x&DeE$-*m*tm5D~npS`)TK z6)N~_4Q6(MJY51x`b{G7h>+BrVQXIT%WJ0pnq&zDBG2qTvPW?6i~G_lEqM>zz`QUc zWF5+npv%Gxn>7Hh<#W9k)WfLKqn6I|Se(JcIA-((PSZmW5sceIEf>OiC~%*)cx2+X z$FFdrI=~*NUrXWbWotFDBrPvid_j8(2_KzAyNeyl{E9p-NbRX}^JWdZ8M{7aGE80v zfGtg{L=wpj_&Oi2ah4vJM3Dne#x2d#-;$V;@1p;ro&o;fauQK+l|5Hibgk?2l2SYF<>@5uP*b#5=_B#?tZ| zxvOm-&T%&kHSmL&ZDqHX%9hiCvKA??Lup| z&&!c&Pzn_eMW;6}iSV(wY+s6(q}X+4#xIEixL}O<=^o~}!=WEUaSskPnxRu=O8oD4 zz{T32JK;$auQeG~%JH7uN`AOE_RWB0=JlBALu1Xq5MR0%^Wq?@OVbunXnnS&De}57 z*-12Bxv9ed??G3GnU!(wX`d}knEhG$(IUW(cJ9L$0cR?;yy?#>59vY0ix>-n8rmVA zxe$94_9mf^e$Ly^>=U0f>$Me{2Jl-zI756WBv9RnpsYN_>Dxhv5t-(nO&q{*ZofQh1=C@I(nSr@Sl6C{=w;?*h2c^D8mP$a6-3qwjL7H6@Myuj zyFBhVD7lh!(tvmB9HIDBkC3x?1g}E^57MAxBl)^pi87z5j2^cxK6VZD zQYU+M5Zw3G=+~NCM|Z|!`*cQ4w9>{0%(1=uw-5}wpVycGw8u{Z~v%KW)}H^8+Upn6sy}2@uy)WtW3_%r)~OaaLFGr*k(;?3OmHP zq_SU?;_vI#Y$y1a8iLl0?kbJztLb+7eDDdpKdJ~CHBzdi&T0Qt`^dsJpe{9 zQz~>XYY=4KeY`eDQ%fwumx|4$w3wgPj5-{^(}J(g%0ufwZcKnZ%Pw11az`{VML|il z#YC%l+8*+9CVm4Eq($p%mOlZ>vpz4TWkVFByO?Z_Ljoe0;-tNBnq#|#+f#J>ca{{;;Y(!K!=z?gV^i<$_wT6# zd`d6Qck5i{9V`)}?(1sCD3HYpEA0AyMZtv_nKXHNtYT+%In==ox&I(lp<>h)>%nEB zy4r=`H`yP!G+Ls`zzk=c3W7}a5>fwpFNzq9f9ABxM=hIB)@J-N;9&M7(%;`?PAYy6 zZP*W~d*OIQ%(R)nS7l}4%ln)3Lf-&GD4dg>>odsB9EgVwa+-{Dk*7A$+I1PL{3tx9 zYQ;Ck`NMbxe9`Y73wY?`^ZVu?pAp{J8O1Kb+9P%&9n?dHH~vRLGfu}s_~$|99Nt!W zEkm~+W|=qKf^zQw4qAbcF_bR;-yN*+(5)i8reHn^P@#!tczeu<19CA;7m_nd^B+7( z3-QgbPF#6d2=)Whavb)ofDT-{;g^ohU;{Sv-6G!bkp><%L@#qUAlHu{>74{S8DsV{ z$a+`EW}}y@J45GhU^?D@?G*Ibs6=Fx#Mmh{15SOiB9udy6R7|j9bN;JaLrM)X<_u&aI*7pxJYXTE6;juIWY_Qw4~mVMRRPr5XC#;y|Dwls*qz zS&?@{wUX*d;!b8*zAzAOVX-QRj`KKlN-$z+dv?($G@VLm5Vh7&7n*GG9-iCv5p9ur zMd*Y;LEku)Q^bhC1c1p_z&C!SX1;Eh?_%T*W^stM$nlKiJN4>$xt621k4YUj#Ipfv;M+hs#b}nQ8;aPM2Hi0#!oTp;49r_B-bAKZg_~n z`C`$4nFo_KKE#?LtkNK5sf=PN2S(lI0s^!5m%S!ZTj6|0J0l+a`knri1_UPzX^P>PeK*Yao-vHpmteG+ZfcGR&YcvB(xth|3 zk>VJHL}h^d_TZlvy%u{s(4NPXOU!ludB0Dwy{uLm#!CL1tt-GwJZ(&O{M?!!{PA7| zAcKixecR72M>0@DfSYm@jpxs6#1$br5K8?*de*JK=?=R>r44AU zTg7gW=lvWsJ?Znn9M0Yj`LYUzW6e8z&Ua0v`Du=N2GiIUuGK{z*AkMI+SS@X}6w?QQ7 zpu1y<8sf)X=k7*ocCe#IYP#o%VxXlZ%FZvvR@l?!UJU-FcD*$h&T8LKoPfA8n-3(+1vSFP>h%FNCLp8y$eB}09pi}}c1epQz>Av|AK^r|}$iMAzRAP;zUann7h<-~zU zZrI8FuWwP6Ta|W0ZE$P0r_l>t;Zh{^xbUEQ1L=z2a*PD*w{k!EB!nwJ4-!I^5nXuv z5i5lKF_b@|L*NVteQrPlNuv`WiRX=)+Qg|by-C;8sXujvBav1Kj3lrW?jd!yud`Da z5{YePWQ*HUL8#_`klEfs5#>{GVbGo?=MroQl4vjjlJ~q373kmObfFsRBQkTk@j0An zdxqUNwV(vPw4ef{@>Bu?W* z_jBiX4Qg6h{rqiUYDd$U(!HUfSgSH8_FTt>d_{S3Ob}-dFE%+v={}??HyTRrF^id> z+5iiZ9^ugT&pV?6@Ky{?R+$^D9bwp?G*BfadO5FOoX9t$PYCb%_MUa9EDw+V(6dtM)n3&3#Did?I)a2g0LOcIglMpKQ` z!9VDvWLfdX%0{VCRQ8THzs3U)-wx^dD@?TxbK)6Ep@42tgNZ$TA{5-%Q?w3j3IHLE z{e@@iLl&h>%2sXU>M&`LJ294{yvO}%)wt3M?~=V5-h0B>ivzOrMLn%P7zqxbLd9Hs z_1EaZQ-vI&y5Y%FVp=4(=&41yZb|E#%)W<@K{9AA`X`7X2#x}#5so^gtrla>kqqz71q+)DKh}I%dj!|G_F*5SZ}o48T#GS;5NX!au_HyVV}2^BT@% zoy4oE_x^d#-h6X%;yN2`ZQN9=1&bjKWp3mzXHOC-;2sa+kJp)IT*i$lgvlu2kht4NoCp+)wWVi!HSU?i^4KtFip6wNC{UqxWCt zakd|Ny6|JCTK5DFgHy}lTZ>AAncZx`^R9hOWfscjr!Wocq8>N*OXA{00aQ=7*Mzba z6rY9AkYDaUMA2twbG0IOgy~PwCrjZcd~J4*V-quLq-XRE5hqa8dI2gD!b=26wZ_f0qY)>Xzp356c+u-$cf zj{D+&d6C@`M>xvJT=pPNyUsR28SX=UzvV%lsFaoYXHW)lshm=DKkg5af^~l zxnH{fRJAT|1H^*2!zW_mp<=0$j?w|~)WC0f{?)j8SRU#U_b){%&c3gi2BTl*f#cQN ze|=ZkyDm0bgyNCxXlaZNhu88h3(<_KIvJ$Z#bcH4^c@1smUd1L`%Edbzx_zv8TJmx zCzI6HQ38kTGNLxN2QYmKncA$5vnnuuAsIH1Gn8o=S@gJD>w|e7$la9|r!bWlYwNn( z|Jqk{i6%GUIYfpxRA+c~a~f}cySzIWcEH29 zbE+srU;PXU)^8I9Ly~@H1nTy0M2Q{rd_P%tN$6^lU7xt{h#j+T#+LAF#@o&3u${kT zIvz5Li%U?|0br9FtMj=Rm*8!L59P@mw=^?`d)2m(#!bCmdZzAKe)piHF<8Ji2RAoF zEj>rUrwX7mU}wF;C%z_?U8gDG)iZ(CwB11Uc;L94;CPa@1C6{PR`H=Bt(J|mO#71C zWkK0`=Pok==+H8b&iS70aZYqe$H-h0^OYn8H7#7LVwb;=AFq~e0~@G~by={4C!I+W z1|}qDw0#p2ZDrHF4YskYQ;Rv#D;lCq#Jg_$G+zhcn0B^FGY@O19Dt?)lExE0qaU{E z2f!6P9yytO?Oz&VQ10#}GaUTaUAR%0!irRG(hl#;(9!^qrxyl8F&L&L;J`a%zNxr` z*ut74z03yVR)}9(0|H(ESW+7VCCIe3VC++kD38S8xu-^&*#B%pZ2D0RSM7f&Q#nct zDgy;OZ_nU}r-&xw4$aZgv)lDe>Zrn$s6Ve`eQtsfz#mK+guM|bD>Q7EVx}xZh@`0e zV!U`D&qU5bJ6&umh)2<37HfgKwTx#A8TG_D{~;k1tSb%4{e?sL%J-sZ~a z)rG+WM@%kc-4T&ENGuW}z;BbuTpv9Yq=taPk}2g(xnnyw6)YQm1T&7nvEz@RAw~xH z;Xog;Xnn_;!p<56>wCS+>0;~k^Jr=PJrKxB4>2}Bvn^Xbn-%D}33W5`bIFJJ-xI5^ z*GG_bSm;|)l28*wxN#QUjyJj^8Tv7HsCfjslE6wTMGUM*mcoL)2UTYoh*JX@jSiP; zlhH`$C48iAKAyg5caTnHnMeNUWqOd-i;whomcE9|PswUodR2~7xIr<5Lz)2Eq(Nnd zE=6;`>XaaB~B;}V8Bo*22&T7?Efv`KXfJ7FE%Q#Nsl&6E~xt8 z6V(*9IsYqU&NTUh7rVMcdD>o@D=c2!59xyTm}|bz(W*CGv8IJZqW(N^4j{RW_4=%x zCm%?@J!yaNN4I*+UOboDsiuMX)WU$2R)a-Wg(s>c2R?lK<}<`)5Y#(rQ~;29dN)I{ z0V!oJh<-|o{E#T%`#Z?CLL+(cW=9ro?1dhAbi=9?Fx0TqkG8#Uoa{(U0gslzkcB+F zeXED5f{}3PC_jC(!`>1_QE@Vu=i681Du5RytGz;)l8FBTtck|1b+>SiaE79ml9%I* zbvM`68Wq%kev0=_&+Q=?0!x?6qJJP~u`4I$?$|etMb3z*PA>J=_FZ9(?nX+>i<_F{ z<+YD#90V8)Uk8PnL0{`MQ=KVEW?&0Czs!4^w35`vm8WRkBpVkha9lJz+$z%szH~D? zN~X!MDeiMoG++wbN#`tzQKcNTi8ZOTnPCRR+Gfvd*_0jen#`zesH6nLH-_b%FjDCs z_5Xl%2T$_}j?!CcEIKtGZ`374&V7zOqXLdV`bh2PE}J$NBr%ZuOu|^adIU`Au{?BG zH8Z|?xMv2X-WSY$EzbAS3d$WDhWc$2Y@ho1sbKxH zn9?mFmH(=oj!SAz*lody4dlx%<%{qt?lP+yfNe$OB1UsrW#98s0r8#C|T8O>_Tomp{nenf~RVK)~}CCw63A>A4&c z8mLDM>m~Q6-iBx+VAVV$u;3<_>R90)w1ouGM4@BiQq>b9NjpugL4JqWV|wufkX?U( z;$iJ)`>5C+6CqJ_<5;el#?C!TpG37Mickg8H#N0RF5uiLedb7gGtUs2oijFnL7CoT zOE~L2L}2D(6}p6S0bCp(I_U(s!+3zS2zIhN3Ai$61Xx~gow;%%htnP872E-ByBYKX zWWoN|Ra&Ylr7zpv1i{6(pqLiTS%8|U-n(-T3&7l`?$&Ruk+RlSZoUCtu>1fQ93?yF*mlJ4-zy*g3vW8C##1p>#HbKflfw3 z726<<2D&#IVB?OEVSJ-bb>KNdhr9A4RU$2BB}KwCQ2lOyWsNy_05oEwdbfm<@UCF* zqM5ci7Tr^TkX5ogX2LvAd>97tF^Y8z$s%I9K#;`n7Yc^tvPr-DnS267CwJ^Lnfz6d zcdBRnpjCeK>|@^&F8@O1w_Dv=Q3yd7B9&h&o4l#AZnse((dxcgG<2Y1~;(9F1?$xsoOTmGBY& zi;tWM-EC<9gZlQyY}}+SqwcL7xYE2)K6=o{2#Y;D7N$#UmCF21{0#w=dqh{*{R-9& z*dAJvBe5iis#jyn#3#4$A~mLx2=VDIPKw!MNkVRm=nDEHf4wp7Rs(_TxyAAL_-k$9 zkr{&ExD*m524MGa-R}XDxfTqa%f6oTezPsXgT!v0q7bUZq&*=#L-75+T^H#zU9+9;r7|kQ%yskV zX|~?CO^Gr5_V|_pDG(#8OXjIt$kLoHf0t2_0osGsk;UXNL zGi{Zc2Cut76cgy_b@o>+8F8anAlcwBX|-^prl=XNyf#2$J?4K!i($3jqDshDee>1o zH%fnu(JU&S&#U(zDlKv_!(Cy?1vew5?M^eqnEOiKm2Sj5&~ZW`YaMG3HPD?bu&-V^ zxvpkvlUDd~zlfeGFI5Z7DSPTbgqV<6m;4LQ4zpUnPM1vJ0eeC-%_ywsYLW8-094(^PU8@1KGCqgoE(PDfmKp!>5- z9TfH{r7Lt)baNE=g(FNJ&rsBo!g)Z(rB?d4HdPWwRVpJ`I<`E7o41!A0ysc=^DjtD zs;8@~{_7rocSDI&E1L3-1piSY5O6nao^R&P>A`80YH@!=8%!=QZzXW>shuGaE89h|NWwgH zZLL^LY)HXC`I~-@xtcR%4?*?-CZyx*adu_!ozzUKZ5uz9B6azI`$yGBy)H~ECao}c z9O8guE+s4r$1h0n$L(CnryMHGgkygZ&);;TK)qX%8-GEs&<3aisBl*!C`z5}bbiwM z$xC?llsT*iI)cS=x4@c`)WKs!Bu>YxADEfwvUZ!xQ$kt$+kQ=FgMm~AZOf{hk#o|n zL9F1L(_goQ@S07vw-_4mXB~V%LwR63^NIZpR5af#R*u(h@-7Jg7&@<-FqF?l{j^(_ zXPLrTX|S;BDkk!_x#3PQ!7yzUD4_3Bb(|yF7zROnVK<*aE`h!%Frou*Z^fAEb(@qed!= zo4k|MjOJTx>RPIZKeYNlAKM(?hq)hHBt@`S=eRIMAoBew!Z~cMF`lhkT}7kZz`t?1 zSqP`<^R-jLcwJEtio?tt0(n`4U*b%W_3;&9S@SqHYfg2P^z%V<#h7)y$%8{N*?G#v zVgw8^9Vo#?XWp^=CBDbO8iK-nAW~gdN3|j0%^*!1Y((`8mqQ`sN!I_W6hV1GIW!Wq z+DPSdC_*Xo-DEeiHt4oM)DxQOPrH0$N?4UQx(r^{V6r1&RgU-B_)`IeT995Zipn0I z#fINd>Q4p5ngG$7Pbsj|u0I%GdY@s0&9vj*fCv38(r0E9seB>r?*^PUB~b9D!HvA-^YAUGR5 z!7Z&He=u|qadRaaDE-oiV##=q8qtHw$~dGqF7_^h3(f);cj$Nxe2+vZ?G?eURl+er zPV-mV(Z9i(F9nM>T4OsSY1!~Zk)}GBPOIuVSTh_!LiZddtrl3#1UhlP@jX_UH@-lz zRzEs_DIuIP>zcF&FKI4I+VB|o2M5`=0G7lPS*z~ThCJJ3!Tb?Nr`UuIzfnHl#KP4< zeE67gvgEu1LoZ(km4cb4>VNz?28`>fM1|OYC zldayhLMKf;6rX}XT@?XWQqG$qrF&@9xQZ39LJZo!^F8aP zoN!M*$Qoc>?-bmLER)?7#)=DlLK!j)=xs=Y5K8+WL(pD@4VRic{LII|O{=UnSPV_% z&He`#J8`GudqW6wpDMxja=Cd+bGh7KN+&2p#Ah`Mqc2Np)x@&D_3xUQ~E*YyqpJY8WOb;)`5K9m-cF&o`c$5|sH z%>R}pii+;=Ldik@eaZRJ)UfMaUVcWaSgF~Pa;)-27i!M6Jf(53Vt-0><2hm{nyx(l zOeI`0B_Ig)arqHtRtEdjN@idRuyTAC3tolhwT!@VL^;eKJ9jl9QW7^&5QD~GWCi(< zq7+cV%oYw*rF4lW8vr#1r+<6D%{v}^7T%R~RCXw0&5N6s#7NJCkj7l)-Bb}0p)eG_ z=r+aj%3y_{7;{jv>i&R7TF(yz`{Ycxle{B4!FH@hlM`Icyu=doYexK(iiD&zOX$7h z*z8C2`xU7U;?6sy z9rD~*8E+8k*6~Xf|9|-f_Arx+QIhxG=}!=KRbM7Z_^0r$>wXCdX8<<10U+@{(-^xh zMzzdvboxtu!-W1VX(~~~%Qd4Vn&G2XTa%SG{+V#N$Q54Be{Q}j?kxnZx6qq?TEtwy ztpJU^kc1El&7|mg7i_RJPgY1HT;wP2f3UjVk8Z_9|vA+O6mnEn-Pjr9~UJbRA=3HK0@&Jz<&-D zs+3kO=K1R)Drpdt?t|NVC0-cJj|=hrGoL3MZh#2-D!85^oxB8Z`OGc1+zU zx7}Hqq2jw?S7&5Rby_So_sGrER9dhqw3N=ZdmQ|&jFz%Q!GiKVq6{%C59LYRtfH(xOMNcYo?v!XG%fIIpU4?->9 z874}N43swknVWEYi{1(dTCpKJ&Z8#DSk?M`S)(?T5pfZiy9qpot8LWQ3IB?`BiI(- z5*6KRizuihTkrfV;Ljh6gV$;RAoxPpqOM%Ph>fLl9*e!XMWUkni*D!DrFA!J?%Q5j zu-T+5o|w=&{<7VtR~t~TbfBUTC{g3lsD3}yV|>M8^6`jM7^X==xL;Sl7Sj7z2f?k5 zK#HgG zmP@^k%6b%Xfu;-1+jT6Ja3mQ8h0hni62k3cD{2uTyS-52G{(i;+Qi?;N#yrF;O5Rmlm=czv@&UI(QoG`GSTz9x!slokqnT=_wO za>!T2geR&5L~N;qLvK>~rtIITkE-p&705So=j=bN zQu8OL(2CWzdcf9*%)GcB&&O7n$n8m8N$gJcDB(lpN0}44EV{aycm}`%CW4ssDO(QH zQqYeE&tLSda1ewUlXd{g!0-hWJiz2Nba=La!lxy+lA>P^vTBixXs@7gi*#1>Ly~*S zna`26W}~iAO=Vdk%E^#h`6`rITW_Mc-;NQPu!~@%)(vU(X~nK%?{b+v@tO`^5T3gV0bYc`aK-5-_xqTI$xptgoG zH%8PoJa8Cs`_1qk#<}3n`0A5lq;+$N7XdE|mG0+o8O?_4-_L#m5dHo0KFVl8LYw_T zvHb_Zj(GN$MW8DF7CRr@**yC~Z;8dP*wR&q9fK;9nyhVP4qe(zGqvp>Afva!bNanJ z&mLnAYI45m|-fzCDSbk5^3icvi&5&BR#v(nxwh~&nyw;uaj+ffPdauJD5qUj2|iUb-xnB zy?>6*PGBuL?@}75-xF?T*QnalDhDvHX-EF~{3`hC6aiu7n#=Zq!7S+i_aGkoAH9`q zxFhlHq?^NLBr7*AS*{?XZ+N$q9D9gw`oY-p`pHa6N*?5P1yr1fSfss|y>c8uvaey+z zkZD_=-`bp(MA7kc1cFZ*fE}ZQoGeRmL9B*^X|4Gc3LJ3$AoU5|ZMfRZ!i|w}T?9Gi442^b0nP=O+;9o-bPKD4O;j;+^OYrYi4uUN zFAkhTAVEml@aaFLgpAvLqEJz-Vghc3?1RFkwmpe3cngox2;%oZGGbbjYEG0`Ts9AR z=%SjG2E|D`42C>&MzK*>(P>bbpO$!=K9U9*J$Osy;r>+}(R=N=l_awM4GE%w4~;0wmzuS*>1*^1Bj5WnoD-HMk^_Ri7U z^VjIX{zGW{LB^ufD3%Dhg!~|>`jemoW#Gd}{+Zd4+zFK6>ge;Q7(;Ws?uQH3f@0$~ zAKf0%bvg+-7!5u&V&paLel)6R19)SD5khj6vl<80B!HsZAwX5)`Wg3Dl4WQ0mf zDDQ_YYD4_OB%L4yMs{lpLwC9Vl2w2yE*8*r^cu#Ea-{lg0TNoj#$(_Ryc3cn@Rif` z*xnhvjz_@(qL zVbU~l3T@R}5n>fXvg(wbq<(thXq2jeB%9X}4R<=H_nb4Z?J2a2_J*L!?8ZSI84zhXi$Jb^}l4r=oTqws0BhUNd3gmIxd zv}A|;5;m8uVibD}Y#3}vxe8ip{F{R46N3Ywjgb(1l>p<5n!SkIC9>5D=PItg|h*XDvG7t2^kzCE3FY?h+H) zOG&mn6bpL_6W6D=wSS06J#ydDfwFxIQ3C3rT_Hnj^o5GSXQQ|9-aK7vU1B#2F#t;u&S)c`PSg(F<+vd*8ULL! zdUa<9XhzQjG*0y7r_~5_tDK&p6tj$T#TqIQgH`Ppkfd1`CPOi$f zbTi7S@$)mvsdo*Bv(1oM} z3wspb+PXzFgUF32U_LOxzML{Kb_i+=VgZ`(h=?NLJWtz`uJx*4UNo=-uouq;#~iNl-s34C4v;mt>7EaD&es%n|<$e>vPdJYJX zjx60FCS8KT!t@zKD%J%Z!(rADhh0M5D;?+1x;A;8IdHn3Hq#X-cX6N@)*`)|$lvuM z7KP}$EgYNeWyV%%R<+LB-4T0ni@+)x48+)W)L(X&yNE!*((|fy9uInI@iE&IFm*Wc zCmtGgDHoY5mGiaDSj8ATP|lcxWQhiJKq>HL4x^DM1db~#{@ z-p%+7zc?4j)Gel^s(=#vf#gOZvc4%1SULA?4{u`Zo z&F13Y@ssvNTroe#yEhT8SIWLdKK*!;GUz_nwA?*5?+)w+>Zj-E+jSK{kqA9#wz2?pm(k36dn| z_ok`6rI5}S3~Af5C7^h#+nb^X1JX zbvpiQN~h*ly>+MaLOC;Y{D4;st>1mm(r|f>C@*J|ss9>VbtFNHtKZR0_we$pMQ&3% zFBET*Psi3v=wLafRLM?|n~0@NS%${=yeX?4v>uVADT#)6Y)2OKblG(*3T%j8CnpR|w*q&%Es`=dCfy`-$q-2Q*^B5tWS`-_>2BU7Q)leaHTXUp zXhMYXv0*XUs+SJw)b&Y)p~H_-Z;atoixNV~*sWBW&(p40&9_5iB ztC`Gpt;hN?pI|96;qH{0s#I0F``A~FPn}ke-O=s)Y7~c0sH$p5v06q?XGyuKb&t|)GXZ{F*IiAvMU=?s`8TwA#rgZ-OIlUH%U5GSnx`Ow`UXi zu#j0jjg#m5yvyu@eu{6iG`IQ0{p3%4VJ=BmjTR0*8+}l6;6Ls`#Jauf>q=zaV$H*J z@Uf6Nmz^BlaVTX@(b2<2DpvA;^vc2wI+ju~PtOp|gzr|^m>E*lAQ6vpFMP%R-P1z^ z!G}9v4c^gc;7#knO;rQEqfzni;-qQhiZTiH7snwXB}|tnT>=7(*x8Mw>up-BKZaPh`n)+MxnL;_XQ1sO z3e6&rfFfF8>oF~@u)D6xtb#Zu&+(@Jw1{yaFS)> zWwgr$ohRXs&NeZvmcE;*dGJBmzTbcnrr-|R>=5}HsyO8J=Aqya<_JQFR@3S5VnXws zR?NEoBtLsHetHWZ$O;;0j}O-F`y}=BBjAL&0uhV9j1WQn*S!Nf_-cT}RzS3~Sq~fc z1k~mvsH;c%c3J0R6|tx9GqIfu~)uFR%3h7gDIS7|qsd zO9z&pyK3NFPr1gfL>}?`iJidQ+XcG0qVwo-$X%@xW%Djmvx0aoRne7k;KuPfHVS3a zn_|HR7Spz)wc0PCQ`I&?BBsV$3WGFZ(x^U6I|gD@;Cg%q+8K_0%1~9_hU}^z%|JYAX_r z?BuF+G*e&}0Ydv|pP84{_0de0NoviI>bXWn0yg=S)(!>MLO0?-?K^<@kY7GP^qeQc z_qc*cS7W_A@RQwIVHY_V*TySd4L2^qN_|^jHS(BG&;?>nHJr|lzDs$oHzPNdv`^BS zt<8Ok*baR<407UP7x%ng3zd85mb)k|!w>^hdieiSK*pYznTqad52$6sjFFXnNSc>v zKN?UIuXfeoai;r14`IiZp?x3JOu%bP-X&_YMf`Te0unD+ZcOpLGZFc>Fa-vV&rQcn zK=s)ASOL(xqn_p>QAFe_+lH1<(QyP9WE9~KlZm9+3^4W1(p1;hi7Z5Xc6wN_0v7H| zh=)@TN&zUKmHDh&pmd|uC6nA(Bkz@ApE*cLub9>A&OKSuh-I@C`?#riegvPQnBoy$ zFty_G(M*q1BcXRr0i<$B_b>*USsg3P%ZeRbB?-^p072oVq>$kkEqeql!x&d4KcB^` z+V_~Fab7Bc-ngegfBaWq{?V*1ulAq}bHD~im{4;2x?iu@k6+$mdYsADzaLJBF5d44 z3%t0j?Rxp$;visd3;1TNxB*?2*uP0GsT;131rn(d64E|Y0;G#?>J`OK!G#auXM;FgMl zqk=(tEOY(R?sOpX<#-mwIQ;qlDb0U8FZP~pml$X^&FJ{1VzP#56QD^y_|J;g(#fq& z&vb=aNFYFGIuGSl*P%;IY7Q*w4H{{B@KMGTfr;3~?iskBJYy#ts~@a*JX87Lku3f+ z*#%u}X$lTo#teJhRS+Q=5Tk??5|I^bJ@Bt&{hUD*byQdn_9xNS@svWp*->jUNORws zl!*$;r*UMjG=DIHvJ|4|r!a@J!3#F6g~mF%`7+fI@}e}9?DluWi%Z83D@>u{&PWRv zsY1JDe~D|ngd96u`II|}0LL%?S-U%G(5tFrCQ=s-D^cj&esFC0V*CGJBU0u8^nK~P z{s_HLVm|OxzdvQBHnu1``;B@{9Wt9@tvv76DR0_-au3Wzr2oYvQDK%s9O&GtEK2hg z>B^&+t14?q0INBh9iyT*88a0Yi70<-R!=4?_DsbM>*K<-A#o&`r!9n@*TeY#4zN4P zg#4T!&9AuaN+ip6{ZSbXQG$rW81dKPD|02eM2@u*iyV6{#EOIu$|A4~Q8b`&NCqOJ*3*E)j-eld#x<9m zlD)~P6~f(#F-r7gTNmW!K|-glyMy7R`UVSTvmNm!H=<80Sc_+XJ&rOecKr;PAFqC1G6N zQ4040$y)@5xo{&3Kf3(xEGy&f0cn0IH~l8#+fA-{t&y@*pa)4)*&OuJ@~Ywv4LeiQ zv9$JW51u?K^4AihN98WuUs9?jX6$!q7@|>Sm!Jr-#pyVK2Z175?aQ<-HByi|*rd$Y z+$8EHnT-eUKy_nJ%W_39t58zmPyJI3m$P64C_439K7S+5VRF@K(|MWe^qyQNu9N-? zqilzBnH{~>zeQdSji22^7P5cFW+UNqtStI?=#`m7{s(tAc0H+8v`xh8A1XxGfKsw^XLgA%nBE4jE+*OpCF>z35UhFVv$XZ>alYY7(Rn%~8U1)!Pu&EF@ zjK()~P-PmvN2}-$Ou+z;3C~W|f9!8JrhAR?eOKjz^7JuzTVgt?%KU-PP-w^PtSI{j zIq&v(lU;Q(Yu-5w3eKH*tMefu@zP303g<~f5-yMpX9VZvDoj4a9_dQ;$^dHlM}~ck z_@--mIg^i4iZ&P}*)gOdw{J_{xQaZZG)I62J~T*lpF+?=_Ic&&N5G<8rnrYwBOHoL z{GX#kOa|NlI;c_1a&K(dEBLVJ!NKo&9}pPZ+=ZntIOW;k$oNHr&ww(NxO9|oIdvHv z-MS^p6EQ7U5CwoVZa(R0X+itC3`2wRhcAR#AuxJ50lahaJ*41S)a#kyy_fkz!J7__ zNm)3>%mo`_xnV8haSF_CsLQ9XDO|1OJ22Xqe$3&d?UYMKNAoMGj|lm!Ugm}OD$O~J z0=ZT^h4~E5!8zVV|C4WBP}As=S~<3n+@C=Y1kpje{_4~q1oNLm93Cpe*HXIKzQ-e+ zQUD5t?dPIKKMO>iM?N)yC#c8#o`11#5v2?C)cc^;39TZ8LyVoSB6Nb;tNhQ&QwlXpSw*I>tyk4jUUZo3Zy@Cr*Xx$O^$x6|5OVhQboOMqa0-e zGuu=R|Cj(DRV<%4o%nnown0@-CzKKjeEEtoxiN7#1_&Sr{t=j_TL$(!i^k_l*6A8c zF_6SE_SrC)P&Jj3t^(hGarVuRga)C1R14>JdF{8tiesUAG7RlinVUMbA9(kIq;>WA zn$}=4v%P9&m5ixQ*#^mk_up3D2b}g0 zs`7O@sT2=r{|u1XDX$jHPCq2oHOql8$yWL}78|oO zH&6U}gte&Dh5c0QJ?2IfCgGOfI|&t;hRAun4xDhXWVrv~@0OR6m7ZicF@mA?;d~WjY>U^Zb!Fa0 zQ-YHw(gCqIlJ~ZKfF#)3lW= zfe(+kG5)cTfzWu`==*JViR#3C5*AwVDH+fKvR@!rbsa3)C3J-5+joixVU}d1->4OT ztStc2%vXmzTJXlU0|mk30-2zKUl3ts&iol%#f1xA3%>q*e5tT7{RRK$kKCafK*gNX zr6@?mHG1mF&>k;A@;L$BN>w%PgKj4 z^z!YhQjh*cRjc2rbdjl7el0e%5uKdkIgr;%quhL(cRx@>2so~3&f(}*V%}>5HS;r% zD>3&WrX6G<&p&>TiV+t%8{x#uwJ&TMzRL(NCA*Uublpxd(RG3}I=tWdp-TEDyoM0f z^PU-dvpa~s_x*bw69;ZM;bu0|KO(95%ymd{DvyUtSzO!-@1X~iw#!PjeOpi4J zMot*f&@{5yj6nstRxPo~B2yX>@--retG_2dVqN=pilqh-`SF^M3MzEYV01}j4GBjx z*l~%{fvVJbsnIZ!SMjbQl;2tdkUjY?RW8QhfTtq|yHrSwd5hY}#nQw?Ox=c&6_cBP zXL;qDtc}CM6+Z?3i36F4&=Y4bO+5|SU4!XrV?%3^48FMOf&9`ge>T9bxMH>~Q zb_xfG7zEvg@?@GLkN$)v);MDXgRMO)>Guo%A5KZVM-Od$rGntyG=Ng;ECB zW;7b7)zRN}zG2<8zS%zC;vcPeJ8mrXxcN&2;Ds2Hv`Ij?nZC>EQR!-|s*8PJn3kpQ z%08i>;0TH*>dlru)Qb?eyW)8NDGq~(K1Y?ujL_B8exAwCYgVm-4FV)?71tjD{B@5H z#{nLo$>;9X2=Z8Dw=G8QK6RM)4Xf?kvgL7|X77m!h^IB^nqj`-ewo3HDk28{?fp8wq}rXpYD_m#=`wf#p)H&;+R4+H>3K)S!110b!c z+Jp(7x$|*FwdvtHaYJ6Y#E|$Zr@MN??)n|}rP-_Z-Pz6W+T^E5V2NX`8bKC-JCKQD z&Hz>_Bq@qW`Ry1~BtD%g=d;t9&K2Ab&witksHjB}gDMy1+1Tl%gQlq4Ni8R8&gDJ>r8`jBbxjUIJq|J z0d2}Pc10klScP{2K%vALT=Sa4@tKipob=lUmb9Z(vr#^;rr5?(l$rx2W$WdKNb$*2 zuoGxNPF~%aGLGw8OI0#De-9`Tk6%`nk`=yx8HE!GO`+KF>U2z?&25#39#4xb%jM%F zB;;e|#>8j+WdW8iDwh_#<={EnCSX+;lrh)D{gkqZY))RV^^V2Gt{n;NKi*Jop42*I z55YbE@u=+b_rFE*ssgHN1Y3NI+H|C`LDCl7k2gcpxF^jpc$=)yo0oG{i;~o#aC<49 zh}lBK+Lu{INeH$63Hkp)0z@@{Utc}9wZFh8o1y^@0OAv);Mj3T=II)O?S|!!z-9o2 zkcJv3lpz;&Y2|q3PL;&x=JENyH@@Aqtiby8KGX%}{5mS*8 zi433pfM}-vXAml@iP`-=p=$TvbvgxTI>-9x(K-WlFGev&-11M;EwAoQf7x0@ozl2z zYB`Mloez5-7oQ6nczrePcGem`aR*AZGe$R*I_9cEAIi$wp1hr?dgK#uzWOXt*DMGL zgOfjl!{1v}66GH>2_9M4+rq*|!#YKTcIwL@S-lZGaxU&MzO z6+!kz=>e@0+#g$Q3UdKuoR|+K_~l}vkjY4>)%O+{IyF8Iq!4a`EVEOiY^o(g3<1iJ@0lu zW9;uxNE-a;^50=&F`z!~SCWr{MJcdxTFs)78M)1R>*%7teCzPMeR;6}fH2B=%BMz+ zN=;THV7YbeVLSft?#gUM=GrbUJ=bY$k2v;0hCMm9*XW2)uir(k75AK0z?<-84-eDk z7Kq?XMP~Q!qHP4e#_`Q&1|ch&h0<6rrO5V<+(U_enMp{w0>8KN9LofYt#*>S`+0Tv znqrxdJoc0oNsqAMQQaaSUlY1v_-*H&j}%X-x5~I3@HEQ3Bv)TN+cRfz`pGy5KunxT z#KEtO<`|hsQ46U6z~k>mhyrKGo#rY32V+aqKLSSZR+s;6cs2Tk-V&4YU~N0rB=x6|eI4oxaJIVv9P+HHCb?FD-86 zzqW7%A3lAXza3{ed+v=$vTAXHf6otO+O~7LzTQzSFE{py*(o(S@Rkv7Uwi^^PyjfQ zyD%B1=zbY9X@M*x%l~(M{Y9NUriRX4m@9L5Kik;KL1wtCOC#>ZS4NJoHjD#uA!fnn znJ)hWZSeT18$&iE(M;8E{;vuQmXbM!5SfHG}7A5rU}<#ZlE+fyD1FVo2j=4_@}~hj9SJ zBnbe>*Xabp%}-S4WR``%wn4taF&&`e!B-;DBcQSd^F$fQrO0y5pwtYh5?#464_qY#pIA_ zQMX1OD=!vN;4Vz{M9;f?V|#p$IB<%@4eAlF8@)ezFmGMnFvsd%drn5w34x@0*J3Cw z{iax9M7*=!S7pX}VUp*=#%M8lLJ>IM)mi+%}}i^g77) z=!0m@lWt-YX{?rOLq#+f5zsdq>V1t%nB;(>$kQhyl)Dk)Yi zEZG*K5Nyg>K(u}eP3zwG<;W+`tD?N^o^iet6oro+HlGzN_VjwADDb*M8t963hl)ev^9`bTe@3| z7fz`7_QltEeor4-$(+`H9J$$HiS%N ze}xy72Tg)|4`AUa<=e2z>Bk2O7Es_J-G_il!$k+Y^T0imdS%(rs?YpoPdjhzmnX_DV1WA2H0{Xl zBVw0SJwbVMjm(3so>3YP2nVwEnOBc(1!(xt#qP)YIKZVwq!e`g15z@>P`Hs4=iRnq zS}`m1W-@S3<_sgM<8ki!V(bglKw*XCqzB6jGAaCeAY!CEY}GGJYCw~Vh=DW}*JBie zV!2RbO<%gvFLMjwk^YW38ROB%ZWx3tWLCHA>$^O|c1MJ=AVVS16D+xy%nq-x>?p6K z69+j;Acmvy1ZpGtH!j32doIyKQ^p-~^wXh4XI=@ubur~26HIYYLiYLTRQryvj(>q> zCSxf3(ck==s%+gi_(|@AB{)-Aq=o+>W6U0uf!N7!viC)p7l#%JKM+uh^zhjUN0sB- z+O@%};prW#+{~Cv7vUBb0^G~FviqSSKJYTuchBo3(R=hNe0S3hKr_m19RB0v1BtT4 zHO>0a*XAY}20xnU!0+uipLto#ZZ)C)n2f{eE@L%`d`DHtQe+?%t_sqmU@k_6eeu;J?8;x*t)J;Z?mTy5Sn3`h1yhZ>S zeiun`h_jFXd2|;7E{RV!PSnzMo;AhR3ZI`w*Xa~BLdb5oDD6?Ve3+GAX7t>pNa(0D zs_KCGUnZdDvG~kEoUUH4X420n0%(_C>o0|o0z??(rT-eGsEAvZ+$4+Cr4TQ!_Oq9i zm0l2AttLnwAr~uyQ|iIgCAm>VYhBn>uII}}+-Xlld%Ry$9=+(*`7Sl)EFn*+0)z)@8R*@zy*}7`MN*u@@?2@Sw;08|$Pu3Jk% zmNFxD9>(5%#3@FhJGr6^%$DOfC5##4;_+u%!PQ<4(DDE2vwT zNt#DeO0G;GM5+g*Ki>LPYH*{c@YGo0{@;UaBwZ#V=>!^KD{ z#+;GYD`j$>7FL-_J~;mq><{s#7bWHDg+`(lx+TGgv4V(wc9_4P^ss$m;cuvsAzU`* zsu@75?qoWJ;#HA->9@ zngMiO0A*Ktd}u6#9>pSO^-ds1=1$$x944!E#+H%{(TWN$l8#9;WjB#<;;jkyGdTn%UuKkaM{sk>FcB~0T9AlMFrnnr!t-9@6j|%=lqUi zV<{~F*z7p1FQ zXHUW78ah4nsUs=JrOKIF%(>)1=Y*yKAepC!IXohPiR@fOTs7=*?|>ovv``dOz-~9t zuT0Icn`*RA)PN4&nuVtnq%_bRNiCElckz8SAEXU4gjGU_v4s2w*IR1F{f_0o<0Z@3uOt^?#asuIke;3eokE((?)nC@cjmKYCLX~ZTe zFTraOMe41zbh-!X^ZY5iASL4uPFN z;#vOlR}aF-4e2HUq#n34ZYY6Lv3*omabN+jlOg*ec4U~n2ECxGg#QsL1koBtnQm`S z{!Mqk92_&mBUEx8=vR|lsGL?bAQ4jt^X6|fX@=Xnas`EYUb9pV1r7b^?l;Va_&*yFS8qA_tu4H3GYSWn<21k> zV3MYpoRL7e@iA~dih&S0`{ZCj7D%KmK+0TIA626HWd7D zEZ8tT`kg$KkmIL<1X)K}H_GuF7~sp;``-T(f1d}Sm~E&zh|larF7JZqMs1aRSb%f8 zR?P!n6tDWBmFslGQ3ewW%SZWS+!`FHezP|}j1XQlbsEKLq1rKoyBq`nR3{_Q6@88n zjHA}aZYDuSJL0IzR@{}5f7i^|Gcr{8Z9fI~!Y-k%;Vd zsy_l50t`CQ_v8ufx;|m_MhEk}O&e4;Z}?bA3bdh8(PC*G{=*t<4CVfTc)DYy_j z4!V8=^(r_PfOp~n%2wXvDS@6XzlL_@hACompVr$EUD?J<)#R~RAw!fOPl{H zwtgDfG46E$7zDL0;(#fRud^5!zlNzlB$|DY{^ZAtd$ECJna}YMLF2)drhwWY?0}R~ zotw%F66cgih0h;^j%^>a7LJLCk0RH-n)hJ#deB|;ci3M%vaqfCyGOcW27kD{QWc-8 zMd$C7MP9qH5Vv-Oj7pQ~izZi7QWM7>;#NZKcg_qTiH?7nck9*axl8KGDDlBL)Kv_G z{U;wPfNJIF+IWj~-GTw&+CxdZ<;z`;PavCm+xMNgahu6tE1S+rKnlw!sd~kbn?~xf z32Z;2BE+e?dxdB0-B5%@vd<(a1B|!g{mfJIS=L5*W|(Kq1LO1=vc(#b3B|-*H|ctS zOrtZJP_S4*1N-$Hh}{R<5w4P7@BFY(wO0!*`%jG59qbRJM_z;^A6qrhcM$5&d8{a| z$(RIy-%J$N#w3r{&%XL6x|?N>b`quKweWm&iS0-|?v>}6vT_Kf;APL_NBbIIMu;ETwXAS;m%__Gcm#JvePCa3!Nxz#3z z15vU+xj7jK0Ms)UGfwEt;}qIG8OJyb17dH_4aLcL%~C7i*hrHWTi|K zgin{EYEUYIy+-G6A)Hb9cRdiC(%L%N-2(?Dl_T^>=`U7!$A^46LS}qN_QjEGBkTu`9yT+tG$J9O@O^r)OZC~6(Ef=7>_<%DMV5SOg|LR8;G^MtX3tuY4fTWrOA6kuiI+d z(sG%Krhv8X6>bD^JOqfQKk_hc+17$46`lTML%mP~y7P8h28!4x zASR9iOyCB{VMzY)tfwa{ayQD^<>8o=;_C*nk$eVMc zoienPfTJ@d&arAYqCfhNn3{YmQQN#o{8~Y*{M!J0V_`bu7B0IiI8G1a)>pOw89UtA z@~20QL9=!>_u(4?PQ&YZqi`($WOeb4Oj=XtBhKa1p8LU0X>j}4%S>AwSdK1N0mwnO z51>__ueC80iA3}LA|DWZA8iI3z(dS$p1L@U*$8yaFM)V*}sJAVgUya6P zg~E6gb&eBZr^?S%so+PQqQWe=SXZtAhSf^QNBc)$Uy(DB%l=uj1iPS4iAQIS>bTVLQ;>Wrv;C7XKap#KE@=+$0Tv_RYCkX_Z!Yi4i8H78D$YAd^n+5%IuM zP~2)b0D6CO(H2kua{#BcI~YLgo8^NWY67}^w!giPn+)ade)%ugUMh9JE0_ZjMkJD@ zr{tSQXanOH{6B=kGDN)q?RkQ&TJsiqpRItxM3f;V=={;dTrV4u!!kO1meJb%xZ+ln zD(h9L$q=EUjGD8Fh4^#(g^Dv0SVmkFV5ue^)3lPv^<9(+dS2SXR;?wB!pbooMse>` z=Rv4P{*YthqiD)KFIG8+ghyhB@v+71PP1?f?={V-QC)ACIAki15MO9XVr^ThRKlI~ za4#Ac)9k3?BcsvtgPJF7RHtrWB!pbktO;;gI$HtYT#-*EXR+-UI=9k=0@Lu|7m~iH}VClpMABgygMNVLLc5pZ)h>zoy!>Sj_iZ4(mlx^)kk)`!Q zB|U@^mniJZyVfGoBozqT0ptKva{jL-u;Z}Rv{_JBkKa(-mY8s~pCv(W)+6AqvHSH4 z;Np}TrD)Ih)3>a1O6GMBt} z4N61*!O2x|sp3vp!k3%|*ias3T5|MJpL#jUfqP@5Bp6SEiLi8L7U|pO~(w-tR-vqib?y&xREZ(q0k@(0iS_{b_R)8t>yBA>8 z0UnuW8+_HPeA5cR%U_};21&<9;=UWAAEOVF4`-s@wE<-cgyyS}MRM8M1@VD-U7u;$ zUya+V1_={JN_pVEvINH}O^wv^Dr^|8IXp0GwTkWh_WyF%OO$uS(X#6dz)G$=;@c_; zg*_s81)d|eri7-ItlM^40A?m{{(_QWo_Oag3#Ma?1V$~6pRCK>SE(4`tN|KBa!6XM z0ll@rqEb`jwk5Z2895)Jdog%k?xy{I#|kqxB1;QY=m`1?c_QmxIL&dupHtv6dja`2nI6^|>k=2kSqAvhJuE znk#`$ndhVdNIzC53kDYK9oFi5?SI~eCrE%U_ASBm6@{&QbZh*)h5il_UuiHLnm`_l z>fG-5k7=3S{2KT0i{8Lk96lCVWm!%dg?S$_=_IwVi!}%&~sA|BOMgtKd zNA-cU`k*km=){7L4<(?g#o&q+OyWA(^Z02J(^v&*ky3*-)uW?q{yF69 z#B7Wdb1ylGVcJz>*6wJv|D@GLL4MVXThlTwdG(+D3jC&jgYL`{LpOz71H?x?toA+JvT(u_OKV}dit z=8r=x$cO4Rl;zKTq7%2Q5Vw z0+e6N{gZc2tR!f@5*J6Ydjb*AS!@Qef7KRyv1!z@{z?WU7gyvPI(S*42(LNe)%9#H ztoA0Z4SQKYV~(W47h2w1Pakc%4>WW4aM;VpqMAtIskE_7nS+EfOI=VW(6pV^SXeN| z%m~;BWL|Xvs|eh{uHL!F^Wb3H9fy5T>A6+#`CHZ*MbUVWD_qNzpN<_LTm5Qi={t(L zbr&s6aj@q=IZSK}5@{W_?Kpve6&N28dE6(?(WoCX9N%yR9byjSZj9)c?I;9^f;@$k z`;D-090mI~xBcYF8e0Y&awnUWig-{9RZFL_iTaNre$4uR zja0X6I>0zsKHz9$&RWB%T(-5VKuq}9MFXbpO{vaPo9K$?z@$= z-hWp~-R7s*nY1z~GFT5>OUT#PvK`SW0vKaD(?THI_-M)A?R=}1 z?j&RGF|G@kiUe+YFKka&?HAvVuSmc!DJ^a9gzs85e1S!3wl#9+2DU0a=n!J>*JnIu z2cgB-Pny|dA(*B>w1w*<2uhFijA&1Ff_jQO_7|RjNizww%70i93R-}J^~R4R^J}!k zUKX=-8ID7{^YBfZ=g!)}jPFNj+Etrf&qaxf{tY365o6ZJdG)7fRQkCOU;oE197fDI zM2TROUbU*%49$RtJOkjyb-7_;HEny;CY;0k!w3L5d0=ZU;8Yk=5ooocz;IuPTcNVuBd+{Iw$i@61T}F6DjS!r-!a1z)~7g1Bn)rB-l%y_axy7EjkrN5Ap818wprUQQraItXcOzAq)N>b6WN<#!P~Ue~WTz}&3Qu6WRw zm_j*gN1D3`<+@aPf)8(cC}(9W24$Sj4jO*Mo@MQ-IVh3`PHizJjV&^Z^0andDtAy+J%^Kp(f}6mQaP?3ofY04@wZj~Z zs7f%dI!V~F*lyOo7TlPnAHw|8`kqw7@ohK2CFIl4VvuA3ZF1k*eZQ+$hx8E!gX@B7 zOsa$bIYfkW8=^3ic0DMiC^`~`1p^VXc64TWU7NumiKJ0O#F!5dx-oj4-Yp(AEy%AN zmU0?Uis+?wZUcm<8mWPH^tPPjpqs)=#{tHjsRP=8pXrIv$h)ai0CBq%IfsaY?I@xm zfKt>>B7Yuh4)#(xs>+vt>>;1=JPNEp& zoVe5NFl8+OuII%qIUT`W*7Z5$3wVi7?t-G|KdE*bM(3$?!g_2paP%p0QqPIF7x3M- zpm#yi@-Ls};r|7EeEK_*yC0DNLnR_-%mF14XMgF|5R<7TFl${bu;D%5(OdJ!^{c?@ zDWDL_BE8uJ3Y!vmtuF2}_%LE=C5i}^7jSyax8l35sz*^Y|Mhx0w7r#Koz;obVKxy3 zvgoIs81>bMWsxlnS-E+(k|AN{i|hW4$6?1ePUnidAh87d4#Bw2YUkIQC=}9-lpW*m zMhB|;D5b(zJ7RZ5l0nfg+u4i^rv;6^opQiIsim5W9d&}RHDBi2uib z0+Fz{%$1X!tX$JRn#gK#GET55`|&!uJ_A*I+JefD*r=K0%Dmz1_`vxlDFm(eD#)I0 z>uZcjMP5n%3_;n2YZahT_!Rvu{Nm(DI8GaI*rBoC+MhiTst-{ym?fPJD`-MjX zC_mDuvXO(GwxocIG`FlYxY>ZR1eeNPhhkxC!JP5#13TIB^B#SL8&tY}$!`8gASOMG zBOH!L-yyHIomf&kb6X%{16s|UZzJze7`Vq4zfhwIcsL?ot%cuyzD{5NvQugmQ68v1 zm|}O)AN9}acynAYtyGZ!_St?^(8>)_-Cl21nPJk4wXXh}i@d^~d?Jk3EU9+T|IAYy z2&QJu-E-RJAhXYQ{Y$xGblc~d_1++qq zfZG*s_>5v2%KTum)l4jN3?R|`(B zJ-PZqZw1BnLg?BJ{?GEFDbt_5_fUXBeQr|ADSL7}kCibT4Yw35Iax)T-asX_Z0>BM zA9U@cLcfr6I<+Y11@l#CurASNq@utji4fEP-Y&o99zP4k5+TxL_rS{DR6Ym7hF;H6 z%ZKLm1V5`$PB$)_!L@DcLrhpz7$%QoDX6MBNDs)`4NIW{9D?7`9i(rBp6Xfd`K<== zmn?Hq{TVXK_L6<<*YEK3b5C1Di>6=3M~c(4a+m`IQNZ(20<*j7+g~L7JHe<@@EA$p z;JVmgDl~S^zy6JxyC)0Uk{ewW5SS`fE5h!yvfL4yKAZTW;+y z`($JBfvK~)N*>JP(L;T8G#5j{;-UhF38#NZ9=@;>*FLSshd{)mPiW)8jC&oOB`GOC z8*^r1#@~je2rh2Hew2N&33`Zy#Pm&%kKlUGt6Su+yfUt99XtIB#(CX!N@LaktwXaz zA!xJ*E$4F)sERtHZs&sno1!!SiQxqz!Gwx`eZS8yVEXPB8v9Dj8>z5k#Bej^#GsP$ zv5LpO2tu3vcVt5YHoRnDzHMYKs%_hX-&TWH)%!c1d+MSrD=q*psa)ZhsP-uht4GwC z50DHquh8X>SgJt7j6nMco6cXCA;$s<*18;r%YIaWSDI+z(yMx=q@hS(m3Lz{gT_vc zhvU*6QqmfFp4dq0-81F?b=p?9@&f~fI6d7D-{)UENknXd{Mt)@kw;; z{rYH7ibkX93jGlCHKsOajtyrQkPxrw`<)y*7_K|B*BTYtAGtERCz9*gJQt}FKaSm* zvcP_4dgmBF@6ytv?4kfAqJ48tEYs3pOWpUXW4fwUE0kcYo#_l z0i;g@Bz9}rch_u`uZn`0Gio>2#4(!d$eF2+UUCpilvUiYH%342{Zwcsw*P%VzN=2R z*7qCDt1D8D*qx$s(gBEML|bWis^Chomnr56tQ+tv2GKKpOq(!CUCAOI3knVWi<#k+ zwrpaE5F3hY>&mi($$7;RS&wQvB%2$fjPj#NZ&m$`*zfj=3=uOE@U6>{X!SLoDBUWk zep8lGu1^P_!KargJ*d4wKjEnURzh{f3Gr8+64!oLQp@~e%}|ND->09KW$p_9XAT)e z(yn?eg!IKpRE;XLkP^-{-W6@mwqwTAjk{@%DGiSH?JiK*-A9^tN~Q zTdfOI@xm6ZML*u%o1uy+)e_qTWOmv{P>8X@Zf@@6RVkacix|hqg8(`syHJ#ye=*;e z8z%81Dp*zb2FpxehK@ct9_&k@ntnX#ytlDo<2WHSZHx_7jMmDWUx#E=cTRkEW$Ncu zY|yN;V7WDi3?%(J66d5X1%rSw@XE7y_ga2>m5OIC@s9sRz9)?Rvn6{;HPFZiVi6WG z!TUpnAVih6xN#sR3JEeGTKiaF8-fB4n2nQpAS_dGlpwS}U)Z*yjO$1%CUx@Gi+&ey2?hI`Bs*-N#YS>KM_-#)ufP z5{kXxo>M8>?-eEzeN zWdr!fvwJcT)>oW3dIVMmmU+;Hvr4aR?(xc9Zo%l0$ZEYF%|10;FJf%U*K^~=+-GB;{d0;PoVcpPyR{aZX1D|}cf^y!|sOvBm_sH>|loF&E0 ziZ+cchE&0kQfwOF=lu^|?TP3vf%O0x0;dZW6m+rqaHAu|d5b`jXtp-_?O80x{2u=p zoLI5XY$y~XImiS#UN2KW1|jQWy>Z)E>&%oDg||h!EC=&^HIN8+3c3g4UDk2gRt@4K zr6%;MaQ;!=YL&x`#>&*|fJWM+*-MybgSTxt%a3U@>`-7nBG_S>>>E&`gTTr;M!?Q6bs2X z+W?d4Q^M~fBGAj7p$`r^ejE*F0pJ(AZwE|OjEToFia1G9Hi@{*p+pzIC%=XPI2pFC z+=X&OsMR4H)_??kFBMFW$q(k>;E=C?4QAoBD29Ac3~ls?eDW-v&O^dXqrY%hbe0`u ze$Y>lSQB-yo8rnv3}_+Ix4N0jZFWvWU(Zi6=5pj|mi^~QkD`m@eDT7G&NcTVbve>; z=|MYn;p^_{2{&j7dx>FC?U{~)Utb9Gd@h$Zf1P6aBR2Wg+03y#?S@sItIl1r`C?&P zU}_zSP}*&Ogh@MqrUvf>{CtK-(n{zy2otxpICRO_=T&&q%~kg4yGOUgx)X@2TNHfPsTzsH-r z!L1=i?1G4%X8MCfp)A5)8JwqPUIcWDbT7U`2o7!$lqO4{a`5V2n|32KkOSit@8M0u zjr(sp89a@n@>oIwbE^Sb1t1P;4DzXS8^#ZH@}#ZX`AVHei=6@4uSK+5uPu{pkw9Iv zojnBen57E`xm6iqO*7<`h-1FS zyb;4ieQoBki-c`$`>#5etA|ep7|F5K#vREY2!?-Gn%*-9ROyoU2C(@?{jTZpD*t2` zns<*%F+?O2d65)gD-RAKQZlpoi4I8jmnr4|DA#pzH+g$iI^Ah^VTyo;C$YkzKMfQ~ zIxDliN$hj(`8a0GCg_)`=d*xdJjn;_IQOd>?l>k1ah+Cp$CL6L81>|PN1s7hqAd`%W5e7K}*!&AQ@PRt#ZrzhtHpiJt zAGD1}chKrgj?+IlQ#yq`&@d=u(ecOgHOYQ>@TK!RwHcf*uTRuVVl|xb@f?bXgx37g zVZ^-qpa#x(RGk5SsJevr=@W>R#-NUUp{t@$M*J2M5}icsq@QV&Fz1#aPMafq(uCeU z93Agg{A^5ZTWg_fzSsRS7y1`J;CEaxWlJHP?I&Gl+H zCS~~hUwLc&M0wF%lFe1RVJzaGRJ|iBu%>(NazO%rd%P6L6L^XYE+8Vf_-3ng zhx~(AoNHele11S`6JmPz_jVL*Ko@ark(;v@`Z912}mos#@Leab@!%376J;kIbZ=I$XOh-x?ym z&@wM{7-kmsBHauD;N}(nQk-Ew1khg`wKuTUkm1F|x=FXC3>7dw6mGv-E5tYP%jay! z!K{$*%(E+k!u;;!%)@YtCYKT8Otj73Ws4!Rl8!b|A5n&%)_i>AyChJ8Q+obFcI8 z|4qZ$ufZmDi0K;}!75lzya5~I$-}MU`r-Q<$JJR)&$Hzk)vZHi96+TrqrBqmW(KpE z952-n@TmRbY|GY4+1vsTbe}j@S}I>^nt`mHNn8scqo-@K&yXpER29>3X$40M&4TH=o#dj}k ziz6gwsF&JQPCFGPgRr)IGEl@d5>D7}iBMunP_LtYNlMtWdF&ym|A3yRxF10>&K={t zo!q5%AN$kli+e`1fMQzChFXpvpVG_p#~g>x>RG5$lNDMPKx}V5Yad)A;bssyo8WOe z^xtmLvA07aNa)jA9Pv03vN~<(-rc^#Y*=;_bEMS>*A+oScVRG0f5$( zWAF>vS21j*b{P*SR%ofJZyW)EcuR&^JK|a9)L0Fp+i$8Yx^A4?XLi(DB7^p=sM;_D zPi~YA4`uHGpwn!$g#KGs@>msEiRElXlKi-_X5T8;XL3GTI;t&EiKW zh(2=AGO%xQj+3CLbmK`KHa=zLyUvMzDdjl!#)cNUafR9B?*%araD6-K_yyTq^tB(% z$nzWkc2YT<(VER3FmpqDp7~4St-2J&QSwwDev<^G-`k)2)s8T2;0|>+;)TD?3Bs=Q z`|$cZ7F9NAk81ca+J~lvGv(92aR?K=-<1>G|FDpPcnd}9qa|S=cd98lSbdo16?2XN z%2!pih%>{}b2H31)&fUFVWw-jpKa7HW%3|=g=n{t?P<-y?q21YwsTT-9z9G9(+EMf zgoBwyRj}LbEBZltu5TPJd4}zAWGw2=f4p8|)+3)W`B2VOSTD(bE(qCV(*A42VA}F4 zX*!B4w-4W(4wxM)*(P%|eqd)4KBTfoqc^0#{kp_vapjaxjC%VCblk8VUTMs> zfJ_=0=IU(DBWn;2$tAW+L0w;Nc39AbNs}J51r^vFB0I!0U5j& zqJzBjsugif7o;;1H6mTEmp)tP6!FsTMbwW&EcOD-5B1QJnuKH$Okn~CROGc~!vKIe zq0OYQb-BTfQqgG@X%j9|t2(Jrar-Nw6kD~t_Wm8#9T=a zUIrJ!_w05X5~J>GdOD<9O72i(=VHhIzkDP<`2#eePu0oAs*@*Y>TE~m%WMq^?>s2V zmBXU3pb`DcM+o<~g|(8KhCCV984>Qxc7aABo)UipTQrCkkp;_x#w6q|R8wvPW*WA2 z`}ZF3`w>}T+Reo1QXgevYUJgbi=J{e_B`lSn(hHIVeRo9A#_a&^axyXvC2ZlM;p@e z8Apb|rxE~nkdzh>$k4LK7n|1(qmz-od@6kIDekx;L+9}a27-UOc(W2r*x(-Q>9M7< zoQjZsSbLHwdn|9s_NUY!?ByGq2c`EZ*GKU6s>u^;*cio% zXA(Sm1LQS3lG^)vKU)|2bcoGmLf4~NjwzM%7u#~A_9gLOI^XaLEP9Eas&(TqMgMOr z>$klwT%~_<>b`b$Hto?1?^7ICsNkccc>2xE)UzaCIRPJTAI&nYd9^G9fsAAG)y z(9jFHIfy21V{3N*Dx*AtD;>w=+QYRwSo=wkH!?TP7XUXSi&^YZzq5h$3Uo3MkUnho z*KA-;y4wu>@5WsD5?K2EvL91jpTam!g;|K?TZpd-=~v=j0n9Asb`2HK9AZ&~>L;Lad%}^G?$dIzT zr83RET11se&3a_%3b7&vhL`zNgJ9rFX4#YqaeVTn0X&w>G!ozf`Y8)_;?I9a>`Oef z5S^c(B0yT}$oAx2+XFBjPUf2t7=%+Wa(kdrSOTnb(@bio%kO~{Q-spNYp(yz&Q=AG|*=D5dS@wJdC2pQdKmuR`hN%;=H|q`JI%VG< z4~|ITuoD*(HBj^BLQdy#jtgGyMZggM)R}T$U#Zg=&fWpUYV+vs5l`o7>+f7lIkVwG z`E{K#Zvn?7>eG52S@s(!*> zVylsAXfVzYs012=i#&1DY9Z0aLClvSo~L(_sDdlY6^g14+Ryog5tY06jp$zsZ!S6TR++vs|+CIoZP}1e2uF)vc{V+^Wtej$_`^ zCmO|c*NN*C^=rqh<-QKok#s;ZV%{>sf6O5BIfV3m_m99yPPCI4pPQ{;#eJ_>i4hWa zN3Lgg)oF3o^}?tm@&YiRjE?$QJ+n%iw?OYuz~zK{(oFbUNJ>zJyIWt6+*VHnKzSE-H!!T17W{b<|w=Y zjgT^es6kZb3Xf@_X3>EB-0}eX1eOrT@_qHEkrXLU~k@eo0 zhYc)XPj?6@wZhqgy@Y_OU2ueaoz?w+l86_O1y2DSU3kGn^zc$yXcB49JUiHHjYvTB zADU)}dblVVo4-a2DEATpo;coH(ZCV1&WF8>3V9sRN9{pqq(;Hxe&@M8i?Ie)<;1n; z($+8ZyI$7xw9b0%2jqjx?UL$Iy+XPFQpo!}1$)v17nTPXFl?fFf3sy)J2g%Wg_)tt z)_Wc5%hBe6Z(DJQnLVn>RDDN_)(bnY)%dNi>zt(63)Jke7U35(9D{J(8J7Qj9L6nx ziOaTta9t|PkFU1Idz&BW_-+__N4>p&Q6-^y^ATT#on^yWf2we9M{RN|Wh{MV^(m8- zJedx`AK`_jy8XWMmnGY4vab#Us*%wAmA#sSG{aVQ1|nlw0b|0 z?C3hUWqtvFwi&BN5FbS22@GdHAAhe6RtqMJ`UjUtNhyBWA@fP`;a4%n~OY?Uk|=Mc4pr6P&a;NG|o(fWhp z=q~X}v?1*#C(ZfV^pQ{?W6|}r_1|$8W@Kyv31pkWc14B!??aut)>mSvl};5$%ld%Z z1*<6QsBUcx_)bl{@(>7X7MK2FqwD6048~#CpE;4=r25fQOSw^mdFC5!DyVN5YxGR4 zGDmbx>*Bq@jlhC*mb#;eRlbV=)b*0TN|`5RLEuFiqCfk*(QZwS)RpP|2Lq&=NvzFs z_$dp*bD)L^*;{!mglj8cD91lcf?oC15+?6vyGd~P{zdd~21G$njc29Lyd+MC94c=K zrp~2{#nh21r5^Rsv4^B;$Ql$kjg`4fQ8)1G0KLka0Hd)?)J;6vr$ua86!2K3L&cE+ zs?hp}dN48dX8tIaLs>f?qE&Q}+T!a;-f(2jiFu4?wG24S6@?OmC+c;8mn2i?8EpS? z{&1On)O2E5b~~QVIjxTY%}3{ePgKDu?XWk*6vh?2xsb~0{g6T3Kgjp*t22?gBf6Yd zq%EUGT>&Z-woRBGH=hsoMTyYQC35gO_dXS2cpDn&qUTA4q;6b6QEJ$1V%7UDdlq?q zow^df&^b#YLuERg|9h-4&J~-9C2I%E2J8k4Qnm83R-ML?b1!@+9d;Bg2YL)#;FduA zOG1hWAeG%hGp5*r?P>fnNYF|ogWS@CE5Hx~jjMZ4k^>$A>NTx$DU~@6m!zrVlw1Q`LU4=8J#rz|eTpGWsLJ zF$5m~Md>NDDgG+8(Ls5*DRQLl>mij9o8&tP=4kZ9 zqo>0-K;9g4PCp&KP+k8&ZZT{8^u)=RqpP1RuFAytG zyTb^Ck){^45mZVNT@>7%2%=@cu#(0%o;Dv`fxbUmXE%my4$06brncQAitlM8Fhp*p zB2hqAoF`ckpoV6HB@rL5N!cntBHeP0-}zd z@{Zbrv^;*!D}kpJFN>;(0*;YZsAzRz6{Y$^X+-?5H>Q#!`&XG({!Gin-?PEj4i~jm z4~43RVbKW-H;wE|{SECDzt09m5cRgS?Uun0JE>fILOfFpthkHKm|r(HA923#L_uDl zZ+y+!yvaWoG_Q^F$_~*i%)+y|en!nfR3s5AorttmX^>&8982NW0zR&2fPUtDbb;Th zxmoB}0T?CqPd>O^)1In>!o=zOWbRUf(AEt(o6a$MU!<-xNuG+2U^Fleq_P3QjdVP# z8_;!BC?MI3K?`Eq8H-Xs;iXbg62xdICFFZ%J4#e(z(^?pD3=j}|Amj?7j7#VZ1WEp zfLNyo5y->1Cp5Z&R>U9-m0iN0nH@|LcpFqM4L+uF222_9(o=*{(eiU)q!eQnhlx*g zcKeBoV&^^xpQ~an*x#h>?gQV}Iz8v@pkU~h?R3ijFwh)bf#0Qk-ywxpXdbeF&R}*h z6gX7&@6eeoZ){On(1Rmm?gqT5R_b9Um0i~-JIjS_lFUM}SbWm$W&Pb$IKb!_2*hQ` zRq#R(K)`Qkyi0=`;JWK$Bh|M*y-i=KG)sLZp`xm9_fHirhDgAy(W=EFJ-Ei+-^?6%XBU3+i1LRxKHPc9CI+KrMZ-FeaRFGe9nm16X9{+_ipI|YW$`}m{OAU&nKQ9?ezWtwz7Nrg> z(I@zFf$L-58Gd24Z*QF0^@S#B(@LsdY(Poy5ifGozDcPuE?*-u|I=~v#|zizLq5HL zE~t7#*))bh2{b^MjE4Pp?DpoU5swX%&eX>W_0~^kE%}>f8mEVW(FcT2&s)-DhzVCw zBLvDP_rNHXC~6V~+XEY`F^bH&_5#Q;VYRnKa+CEgn5l3P+nGD(uiltvw{yWGQS@vu zO*0t&=9eH5OD`AtGss3o&22dW!`s+ z)n(Js{}HauQNxi%OC*=l34B}IWCOM^Brc{{lov6c?^U5RN1KB)3=u~>WsJPM6gtd( zL%o>%ZyJxMeUP&+Mb6b*71GXbJop_^Sb)iNTOf{_{$oA(j7&S}f?}zf>LI+*z~bNH zPuB_yGEEBE5{O;0yRPAcIyvy>{($cKu`Nukntgb(#Xo6Bd^2ibXJVmaVFjdey?oG< zP7}spJGiSdqb}+Tu$Znpw-DV*9?m(t5F8eAp~rI^Jx*yXdrttGszH9I%fR(b!~x8Q z7%g8IouPAu+WwcxIk(?gAaA!SUX}6QYXXVS3}^ltW^*%u1)Qm8(*Q9Dk ziLD8PSdu;xQ|!JN&ag{A|I6Zva=L)fqzpz*yx68Ktk2i&T)s)GqSSENC#YJq$|mN@ zxohxsfN!}eJd~L2iu(qjNF^nXb~cBT`|wBr7MLppf<4)_e*Lk@FJFFuNnCm7bifWk z)*W{TbOejK7#Tnu5JV$vSTSp=(d#u<+V7e>5vNuBb!A!#%178ETxfBS*(SmRhwY%W zzT!`$Zn(q);}pVgGuj4mZIe6T&!THh#ys%HN?{ zh~4MEv)B~iwHbFrbq9+xp0x(JzFc_HSyvj1k|QG|g=Ctoz0s$KHm!vLX4aEV>R@i1 z8B1z-`^2N&DFB+Dl%BUyFBjw^oVXe6@cY#ta{Ysj`<@?)rd-6>_B|c@M^tT6+|3lkS zrWAx|25Hr`TOAxz#58o$B4IyEB7-4CTmg5yycQL|E$pp-XMDWaol!#N#eDz-u@6be*Kre-mv2=K)z zaQZ`<4xqiE9)OBRuoI3l?fJnD*^(xw=+o(wkrF1{TYcELvaj6WH8og4_mIPqaAb5V zrY*QeNG8~2pjS+!7@%YjLrkEnUEw6gT2_w zq^s5#2ba8ot~bn>o0tL7ld~%H-wBlW5TFw8xRW`uazFddrKyuZ&FgSZpa3>B#hQ7^K=y65lezw*YJ1_?Pn99{M?hpHcVV zh0=UlN0uLsD=6*!Spcn;$(1pCNyW;kR@@K8CSEp2c!93j?-1(soPa`9su-uj%aQVA17oa;KG0iA}ONE;yRK3d1?CBWIx}V z5in{wePf;_gUWtul5Ts*jv)0%T|OMltj?9>%!ZVFQ>|{1gqz1~55UK|gN%fT_X_K~ z29-`3fK`iM=ecPMf{j+Ou+c{l&FvJgIX0rmtt4{pKRPFEJCNFT!-ioUoA|1K1AicF zbi1bTFyolf`AhD@L`0mOtPqWep6}=R8b=3!gs`AufZaJxia*btw2{fsPntMfk#3H7-rVR#t z3*ojhAYf3I12mU3;y|4{3@m^?CJijiU*$~%IT7V$whv%${RQu*oz&ZeV0&I1Uk=B% z90V*DaP-(ku(gy~-#-VM-bqu0_a+hAJH?``k}7-Gv3pakORqDybX5nn=)EjQ(&42+ zw}AyCbzD0$?LP~IMMkly=6`=Xh0+z~fxO ztLwa0T835G3JQCy=!s2W%OFwH)M1NPSL%z{aCNF?pV$QlpcHxnm*)Ur0OA}idGaHs z8&9o^#1VkvS1v^=eS#Pss&)QJzM}J}?s6RfCv(RXK*>(?+SM}j_XoMfbq;z5-VW{& zRhN*Z2OrkA`9%*Eh}XWUDq?}9PL^0?JZ|&=E1K|DYS;>zHLI0?)JLJj3oFUM&=X1g zSu@>-h~|VPi?UjSC(wu>uE{GyyPsX%+g}e9CJs88<|lJB?!uu2LwOJjchhT;QvYb) zt$@#uCCuzd?Tjg=%r>3=)W1r1xZT9vC}o_&g@ea-jKv^vk@Z!C@r*@#t>5HI)Fj=w zl0k%|!%jq;AD04ZtM2<`$yyDhz$CI5hi(T%xI1#xTDv<VJLF25^8UH;QFp%m7q|| zAt=z~B`o3(m%BNYC1mO>SZiJ|$&Wz*sQuY*FuDouI~-g&ze}Ai*|I)WIKaw4_-e8X zB}`Q6xAW2Teqjd&acyJ=oK^f^XfW&Lx*nMqh2QnpSB<-Q0JfEbnxJAy`au4c2-YYn zHa5^{4jYpzOs~X!Q3ft#!6l0vqhPEjlmS+^7j-P|PesNlVc)aD5euDhDvlaou`3VL zX5o*+RYf(n`Kb<(1m%d`yxwyu1MKse1+<9kgN$QKi#2Uxfw$dyW?9S!qm{2ucRR0E zNoZ>5NSbUv=~Xu?bt-`>#Q}s(t4QB~UYCCylQQj}<7DoSaKQV-A z>E?FNq*f-g^jP9RU@id9o(SRJ4_u4b@%g}jNx6ijoZU^sI@kV4!V@eJt<_DY0jh%i z|F7T8-f=p&f+M|{glOPI_7hdG9%ev;mt@RtTeZt7z}V2i|saoBW{aa8Ouz!yvu9G+%6`$;Rh ze=q=$%snJZ^53{Dq%3+%N!K~ZRns4FxH^v5 z6>+aKC1d}(}w^ri(yP(ewxYg)u2w~ZTI3- zN#m$A4VMyyr)_XQeXM~JAH1QspspBGO5GhtKypj?X+qJZ?QQ2${BL|EeHr(H0bb#& z-&j!Gsl!Xsq9v*PC9qQkAXU8sIwC1;=Amv>CnCr6TxmNvdB@&CKQuOsJsexD`#YP065yn)TrODb%fLTsi;@+d8P64*fjI z!w}aYx^MsoYRmE4sVNUKglaEE7ZQq(m^tCf>8)NL1ggPzv`iqZeCFJr7xpXAja-U&_UDL2Mfs9V~ZrW8n zCV4-MPQ#Jl6qr=ji+~@0)q-Y*hHgNz15O2!bFX9nL)t}K5>8i+F}5Oz+w{vDlLt6@Z0CiHIp z^nThxmoLhYJ}iWp)xH6YFna!jO()BxadKdgn~0T`z$Wv!8U;qEH!!CGUH9#FkHl|p zPsgU-poAnv7K}uVTOCbqTiBcNs$~^YKC?tz%HE#U3$5fNY{-Swl(;lq_{3__7|jX? zQ#fB6!BjT^Ools`ioN3}+xa$b9M5wEg2!;+4TAXgPp;X_aW=;gjMF1zgfg|j7>Jqd zo)H3ukjVRM5L~#K^#v45I(bY!KfLbtd*`|9^of*GBcuTiN1mdZfhvSJo1AF}=XoA=7S1tgE2Gl>WyiXkL z%$dDD1+JVC<14mGg}Ng&ZvGo|*LP{x9XftVNy6*|0JSVCQTPf}&q{UfJ1eJiY9DVb zQ?2Tb645r$}P2rqehy`uQx2HBIyij z#UoKv7vufV?e+>a#CIp(WmfUE99DuQsBR&D+(|$EjLw;*&rqs`y?A|kaO}pD3Nd^l`o`Zj&B!PHCsb>r$+L{v zh-4KIbZc~jjdMDhAG<9OLWzj;1rkboB$ED8{<%92*@&Ye*4eQ@OCG^u-a-U-{j0Iz z@h&Y;i98ZKiOD~Z3)}uKaq6(&&*Y6ek}Yu2$QbS~SxOa*sSI@w5GTSuuR`%ZZMHOG zD2%GC30_)(fE~nt3O+#hcx+jxjep4OE6Dz$ueVHKC2eqa_E$!VQ5{X+A}2&?Pwh-@ zL1r7jiyQ^rQe;{-!rt`r58n_I29{RU;NP?W?>>^^Wf;6`wEgsELI#ST&OB}r#Nq}Q zR>{!``950BJNk0QTM~1|k=xyQ@epBT%#;WwK&+24%}Vim9k|!>u2N?KR-!T(m@iNgB zeIN{dXe}RoY0sCs zhKqaoBv*2sw6A#$qQ(j^`0MYgmP;N;~~cq6weC6^P6ucO7m|G#3BW9^-$N zLLEkonoD+zOR2sejGSPAlmwTQIT$d9WQ43bF!(s%G{J89ST>l4;pl6{K>^+?l1tad z&xFb}D`D@eVkUIas(a{SUqTfh1~I{~nEWM4SYFL=rBxFC?ExWyN(mO(q^AGt0W?4v zgC^^$1m;(}%v)nlR38UJV67(K1n<6Zb~ua#SF_k~i|YAn;7o7C6rKDLKo%Cbf7^J{ zk?B{B47uAq%Jz#Ows*6+3^OYMan%->Cz}WAa{{XMX^vV?th;%=v)`Nq#PII1=o;+^ zB&!?{pzlr%uzNwTUi29UI;TT2$otl#w}5nSlkE1D#Y4tCeGuHd zx5ohi59PAPy-WIs*hWeDFW!4L_11Brkp6An;#%iJuEW3s-wo>MQUh(PdwGr0y#FPl zJZ+fTKmP#qE}sds{+0QxkC1Ii?U-rI%m%FptQ;@rTS-+ZVWZh;$&~{gw>%lns|PJ) z!Uv`HGT^T#6)PBwo=JEZHBiZ*$}bCn;%&ei_Qv*o4=<9#Sm7pTpua7DSicTc>(!_! z&a>>scE~>7)=;pTzxc`a5iCkt5@^u1YFh8tdU~Am+~%oa2F(>kXetc1mAz7^dNZ zChFdB$iiN?6P+e=V$02^k_Vu$7nQfX`lEiqK~c!T1A11*%wTEg2*l%lDt>PxBoh4c zvZ?*V{HoOjm?5)`^zLag$xhPZ1pk6Svs`t?nFJnp`+PY5VOR z?kQtbRns{&bw}5%B8z-=#eo|L{Qan27ZTlQ0}NkCw)0i*Z7VhWpV3IH6s@uOo(xA! zDi<#N&c_c2u{}0914#qBT)P{x!VvihcA0SP!~XM$fvBCp-k&5BRc)j9Txv8gtwSmQ zUQsN7&5b#pQ%sFW_1>-j$XM73{H>nEC2~7vEZB9X6S!%Gi+`2O2Si`X6!efc_<-A` zp{v?6N{fcMOi8AZk`u{CNjq7ys^e8Gfl;SaQ;s3DmjoRr>k$4crLipw1B}&4==MApd6*t4RDL- zmVp5EFZMROMCWfJ-h+;9$J_GQ;Z)hqV!rt;wBtivW#f3^EOut@Gr7^d#|@m>Z7Xfv z&+W`t9F~!Qczh*D0>}H>@=X(E1O|QUYleC5th?a1HN9<<-=eNN1WeIE0S-My|45+| zlVkshYDIK<0M>gBr&QL+)Sy`c2w385UYa0g7OsOmB_J0=0i3Hkgi54XxGO7SUbfZr zRj0dzeF7b6{n8r^&5>h1C4%_Jg%B+0RK8rx>S|MJ12jqdGYL008yUr1#cL_~i)`^% z8FA;C)R4qE0@SQ)*EtQV%Z6`NK;vyPFv5jQT)pCx_ri~^g~eyu!ugJ6N=S^ zM(i2D3~AM{M1lnEvPFLZ&I$Hlx0K#rz-y59Hs>5SCLXG{u&HVSI9fJ-Tms8${L8b~ z5k|m(WvuIvu3WB_6Yt)b?ZlmL+Q))G*SW&&}<^?&;9 zK))mmQ&R)ZnH7zJ4>_ob&JLu)7rnmUkNQ(|mV*oZy+9n#Zx(kkwq99W%t>GwBld8t z(esQ9SEVj14Ul|R>iY?2w^VjRgH<+wL)KV(0KAeP6HM5$&$N`hhH+_GHAZivYeGAP z##~e!D2g~P&gkz`wJ{@+KmHdNM>3h2GI5>eiRr) zjaD}1?v<|F4wb+w=5`&(0!oDVtSk>x<0qf+-_FzpgD8;1)d0X4#?vLrdr!9c^s_G-%a8L!UkTD?2{OjG-a=n=d68 zK{Jlu&?zsSMnfghMg7ygMfrL7O%+Yp{(6sjWgcw8#zSxTCC5-dpRC5T5_QI2X>1N( zU3%dP<1vXd4<D?VXbHk(v% zP_%O@7k$~{12oGf;n4u3Qj~1gnCsog?;cszmTq5v@HZWERfhr2S9UtPR|oFj>#B@( zoGSwT*0ObW`I)BDkM07$p+7q)%Cy zxzqiLKhHr+-F;KNd7aX0lJl2(r^kZk03wF1m$VLu%Ka^dZyO!E5F&W#H=*t9x^-c5 zPo(F5Bz*426;0}sBm6*KA<$4?I1>m9SImm<4Dikkm%!~_NZI(bRczMxAWr{1Zjms# zso9Az|D~{7p5HLkl=BZIb!ll(ux)lTWmu(ZFxB&!7-b0ZEK=gGR!Q9sp)rUhWBIT{ z^E2&>8-@c0c>fStZB*pEO{L*y0EM+US^VRSi2oNbK8%em#M`dAM*jyk_E5eZ#0L>> zq;MQF(K%v1-`b5f(^Qa1&h4YABx~Yx-v>~c1hT#qF>f2_bHQMLMlPs?si#^E))MxM zY&Ag%VY6FUU(YjgPp~=?`K&}xnYn@=i^h+qww2?eR2bvDi+Hyl?mK(dah|r$*a`$RSyZZz4sk^bm z^Th-VV0*aR-Etnnp z-%(hy+Dn9@CV;SZpqP-dUn}%S;h1v4=mCo(W|pF-mFrlPUi4_YA}8iS_cZiWRiz%l zWz-F-iq==Fd`_*X2VaDGf*bz3)4|*N6#2F8+Q$Ts7q^wT?&YAVbnk04dw4cbzYx>C z9Lv&rjGa(b!RcVI{r*JB%5|51XpiH_FfS)23ZYpL6Bxdh_ot5*PYUR`vyKXwz^Cu3 zMKY_~qMf0EgKdI6E9(KMFQli ztn*W$XzY^0-S{<-*T1gurqPuuSA7`rjX1M=MR(L){}w#C#ZLK6nk1(#Tb5#Pw?`Ub zm7dGc8+q9f@m_|=?5fO0&0|C4Vs2LVMv0N@77mzrfCP4GDCQ?ZqgIcFHa*paDO|El zQ_=~1-yO6y>RU*4IV9SMR5h{^S{fR8=y!tpg6-lR{i&#y!Un%J-q@FM+139MpnIc7 zK$b3LwG1YWF;K;fT9+9L26#-0pUb-9Gq%Ja3ZWiMD`ei9uITYi#4gA8p543p7_&lI zw}zsPrSEkdDhy_LLBY23*pwn32s8RIW2i7FRAvg6q8T<5-4Sl6A3MPx?D*szz@Q?1Wng zS=B?2aDyE!z)v(`tyMdlgz<VqmK%maAqYw#xR(PKE!K zt>3B8cSxha9i=XU#=o{=7vxBtdnP|X-=o4Cv-6^$P=`3$)&Kkoz*1)W=89k( z^}l=v10w$!OZ;b#ATl$iCJzgbuuB~?B4Q-dl$F)o3~raiOdtQCp4=I(h+|9ef!98e z7VXT^4D1VB(qCvdix*z>jV5bPBZ7}YS}*cF>b&T3AQ`E_47fg!-QC<1(5!!Eh7;lU zF7aa(Zx`W{%WG@tCm@@KEB9zfO!4|i#KEK zZJ{+R_PoUGYIue*uS=^E@iXP}o_)-I1M3dPN9sL*snZ%ioLmsFn_tGvRoRx%DQ`Y|?Mj(}r3O$QdxdyufD$ePuNE&;8>oo*tL#3;%@J=L*) z_|{&maOR~kq0!iAk3E%7i=5jXjq^bZuJO$~><;ui4tiJjDnMMa_7DI6z~nV3ZDtY8(Cmv5~Uhe_W1OiUDQsn6OZF-1Lh(;d!=fdDD=R-;auDRjvge=dCzhJ-`DQ?+$W+(Tw0CWfK z=C#62@!drt2!!Rve>LPUbJC;zAZh@)AskZPj#L?!fRW{{ti=hu7>f?4}(g#-tqfv4hRN;oCJ|V*$^v(h;cEUpCYlC~VEhj`=}M*Axd!m^p1CZBu)PJ-8VeKd_fZhn8` zh(Ay;i&GDJq#iAlfbkxAR#oKVg!!)SHx%7%eK;|PBX76>Dfl+q7w``itCOkOiRrxN zrgIJe8GWm*obT_0yYdy2Q0n9IIdu}|uw9ytoBHH8X;9z}c}ULxXZdZA+$`+};FqS) zw*byMru=T=6TFP`c+`DcwN2F`94j#V#`Vy^6mCkggy>`bO4}II)>aWgbD<~+_snwGJ7ZZ+P@cL~;g)BXt@qu|^0kaKq4Z^9!P+P%r6U%mgAJX&K< zA;P+}An8b!nU+uhvY(}e7I}2(lEl`GxQ)|?^bo58rR`MfPb14VF}g%204T@Fk4?3H z58UFp=K*|`RAFI%Hw7aKp)!4--ri#3`5!Md7*x-!(9xu0XnC_46&?=*M~Qjg>&^VeT@1~2rq@i|V0=b?qU3YLlOMiA|Yo?~d&0*q}Mq*XJ6LOjosO^lZW7&`_ z#TtN=17QO2y~opiYp%hEV#H1(obxccJ}?HHLtXlrw*c#|`AG2%BJQRu-&uLjtI3?x z{U{MsqOTZyh$z6~T2XuL0cKN>syTpD)5|zCLm=T}V?yPgB^p9Tn4djpN+akmccm|o zTz1~K!GVC~G}^Mz5QG;8YjPQqv3QBO%MKd6zxvF=3<~?pj^uW*mz*iT#QTTlrPM_n z>>3C;i5(~qi6VY9eH!=&Mh|^-db8ll`F8l zs9)>TV9!tihZA0R$v{N`Hf`aedGfycpf!(0w`x9XsXp#4*1FK!0IbdM9t6ef&%rjg z8dD_k7q>*@_i6hT#+3+Z5<=kb3e?IJ3u{{bRcZ$@8LCI0+k68$;UX_FbP6R4Z)G3c zZHeqG*g3-%J{o9Dchz`6lCU((D=|yFs7`hEJPV$!)jS(|m}6*QsBmisImRGaiib^3 z#h>E+uTU2;#wZ|XS|P5?iRR8vHKHTV$EWEnnhQWHFfC9H|2qF#V|ImrGp?qMQ25l_ zo4UnRmbYtcUW^=#CY@^pVVxpW-e&XCN#5Ir#htuKD+?G(r0q-1=e0dE`Z7jdkjbzp z>?_$&2zb0h8mX-c^;5F#zZ!uVQR%~uKU|sbVBM|VNvmV`b;Y(&Ryg6I-o%6e!-MwE zEq@`HPMMhn-;oWkb?M4?ev#7~PzHZkg`*^)UDj@taPfbQNr~l8?qr-BWx^u_CE?fJ z25*w@%!z6_*;OL~icAL=2Pt-lHJfAeJfV@m99HqmgIqSJ3tcAOKAtRu4r7O!4ccR@ zGwD9x=>|8b!`Wf~j(!+dn0v)MNF0<@k}(6)Z68kvj4}BMQDhdoe@tbXL{!yEAM01x z36%K!S#Fw`P%~QCtwEr;RBcZcn-Yj-ClMRu5;Mn5;}e|eyemF&(-V4MxXfL_ep2m2 zdMB?7qqv%d<`wVWGF&=827RM+s@XZ_#;5bi{G}D$LoebrihPtj=P51yMpP_St#)s5MvxXHdl99u_UusP}lGjw+g_~ zyH2bdr(;6l5M)Szqtq;I%`Z+QD~$(7E`m|4($Ak-PqzH~^;f;+ zdhqbFVc#UUs#&?Dd9BhJ$iaj_6(?E;tw0kn)7aLB!1Q;TY6vd8`W$5GGg$TGCy7}W z#2uW|7b@R1JY`@>*22+;GC+{4t2Q8AC$B6jVkWTc=4vID>kZ-NJL)>i6+&i42d8uC zDKfG6bA4~xC)R7t4K3V|f1YULo5fpFH`Q=R9upJ3sbu^qWw~C6NY7yw1}aVS7NSZ} zqIp)LIFcuzcZV1i-B2Mz7*_w@DhO&qvu=o^0pENo?H~`d^(At;@xacq2k0BWYSMtX zAV94&GfOw@XGMK0yqsYJG{gbhnD4CAf_|@C42>$b@UW=1+^cx}6ZiO6UQ`%RVH=}D z8=s_?P@+%jm2OAuN}3fV!rJ0v0<|+H)`A~uG-P8(YK9h zzo0Rye;LLA5Z259Ic8gE$8(TKHGa*P?H-!_tW1OkSS`>LP2jmz>=g(Awhl~s!A^;P zyD^8V3fS%0iHSBp4Q&M}P_A#D#RVh2CIf;!-(KS5*yFxc_>)1!{@hxCL5&&=p`J?8 zZMf(sJU(3}Sf`LCL5(?6kLIz}R(7yM*|XV7=M|x2YvZy#xh3^G!e~IZ|C8g@5KP0u+swu)7LZY{Pwa5ubmkqk}+~s!BQDBWVvKuSqeU7(3-m?+gu!PNM8Jn z+DG|RdWg5WT;qh&-5n%NGBuwr!-NV=yntla;)3aF79gB>V?_U2X}eNfrK{Rnuq2*Z z4MAOHJq_fid~Vg7V9b5eYXlsPM6MG{h(^piN#OFd?@wm(ugKonE#d9~#J}E!&Z0;U}0UOt`~#_hgqND=RP4zV_pOoHyyh zlLV$G+SP>@i$##_>&XxCW652dbWy8PfP6?YYB3aucY(`qZ}X&arQ%A=uuto9kv|(4 z#y*>US?mQcfM1*@>_^k(&vzh@o?MJxZ7xCt)hr0LIE|t{7YB!X7n?7OxIlw{^wn6Ttx}3&792QT{_I*f{{g zmYb0vawr6V047$iY)lT4z7F8_5ZV6Vs)||6HV5eI2b+ft1)xRBR17=Ly`i1{0W*5t zUp+9hEH-{H<%X-EenAN7#EGuH^+SKR&5u!qFyAj;6{(ww_M{MdD9{0-y{+;gMj=J4 zY3f~|F+K#Rm8|}RZSUkorA4H?SOeXqf!Wj0W&g)Hckl;@s{q9B9}{v5wxCZw8=|-1?p};dOyyj;nwVD zQ;h?I-q(7qjCQ^lg8O9F;-EQ1V{kEDvNQAxGMoGIpV(Ng)cPeNlH|JBuR*lIXCmdli;v{Q>%m z<+)PO5(Y_>^!s3>xPF}MY<&|*ye{$|-7GNMMn_1f4`;XwfPk2CSxFL6h5djd949AQU zjff;HvRr6H>)cpTev26O!FHTfFwn3cR^-($0yaqofr@%r^lJs6()OMn18Ow|Lm$RIo7OM)0yt za8oO;!*;*A4FB~kvl~; zHA`*>yzl#_kcQC1{pYt!eL|@~yz$3DJK>)b5jkJJgjx3Z)*OK8QHb4!hlWiqG{g}U*(CAO)J70z8iUrT zrBOgHPy&PPb!5xb5S}o@A5Qccz?JZYvr#_KbExCv=-CM=5osNZC<@f6GqUH$A4Fj& z-q{*iA?}Mv@y_-1$u3gWwjWUDsBYF{hqodkoRp5#JR3Mnl&VNP$hY@+5ewXD?r}Rq z{S$zj-sD>eM~moWa#w?i|8#lgQpoU%NBVb(+`pJ!i7Em5CI#7Y5amPdSsx1U{1NyD zK?0>r)Q0Z!!i-^}-+lh!3@I+GH5cUK?^0_@(2yX}+)UJX{ecnaYwy}Z)0?6ia?;Cg znmtTl8aK<_KPT52xA0rqxA2Y%|9!`9R`i^9Oo%q1-2bx&o3({jq{D;(DON;($_!BQ z2I=rado|b)-cYERwYmCuw+J8(2n6!+Vn52*LP~>=TgtY220ndkC)Uai8~6YlYZN5A z3(>4l&usq943Em?YVU6tQzD}kJ-3uV-G?f^8xssvnduSHP9YQ(Nfb)8Ad*FLpw2TY zq&21GOtaN^m`^s{Me)UIUoFw{+7BY3yC5UYi*Keo>U(tC%j^1>2|np(e7$JaIH5ki zc$ik{-}7ywYLhNvWn}`#7tZ!KGtL&k6gh{9gj4%A*VNm)aiVrUc$trm8Cj2kPSM8B z-HK0&qZ0JPJ|J-ByoCN-G6+6Df1@7I$UH_zR`yib5^v9EJh&TwD;ed`J4wgG$AEw0 zp`_|_?7*Q#Mi=$dBvp4?oU<_&CxnxVyY*_=wHc`iMJTwjYG-QpnugD15wg@7j%K~H zL&F-0Ui-r77X)Gc|DeJ<)7clflQT%LH%^|TE=R#G=I3FeDruQIx7aQcFkWKUFiH>y z{&aEU0;s@W{=xm%@%sfvc?bk5DNc=4sW6}PZ#Mv=i3d;r_HCv?@B2MvKnBJyLC1$x zcLbKiBym1{S8qI}T7RfVAPx#~-17oMq0>$VK8?A?GN)yjEm0#5zTX&@=2!vra=Ptm zR!EPkRN!KeFZz&fW~Shq$$N@3M(**;TR$Hff_h*I#xfXkM~f=I zqZwKvcK9IDHmRc5quoGR(?d(gi*C;CH2A#!D39iD$~SGiu>B0?%DR(6ZgFuxOfrq4 zf##qc66L1Nq_I77B)wR?2i%=)Nk_$;11QF5g01Qg)6C7@&J$spmVC+d?elbD1LRuc z>Q16fsjbH+m>qzU$6+b%2U}j$c)7~IVVj?)suZUo4inUQvnUCA zQvF$HJ=~DNO@KFRvAR@V4mQ#Nn>^)}nKk`yHDJ(2)G(fKZ`DS3%%&@}V1%|HPTnN) zfjn0!HeJ3dt}kvA-#T8(t_y@O=9c~7YbjkY%5e8iZAmr<@3cAY+7s!`rgG^El_hQ8 zv`B_|i-{f(@C~DBdGn1G_*e+rfopj~rhR?L6#$CaiK0if7M#C7g|71tBz zXTeOl)Opj~C6>f4<4u_IgLdcFsSjch@iA#2ShbnaqwlO#3$Vz>Yv3sErHRF!%orKL z-drSO2@Zn6UNLl4bKHSX1)`(q3Y}NsftT*S7oM9bEcPE)>!Y%b0Y|&@5 z3DrHJvy#7DV6*Jmg=8pH|JGxGITz2-XV4~TbSfm+kwxPvu2$t;cC=$PjA%y9XxV}e zKZ$J12+0LlK2!y7r8*=lMxcA(`;s7eajW9DI}51%OyY;VnxuA1(tRIJSZL@|{kVQ6 zYj`fKpHKpmtsLS7nF0z_x?w8uxpPHV8|*V3WHEQkewJPi(%b{<_c7^AoVx}!CW=Fs zsbv9nOj`5_x{OEi=eG+mV6~K^=UXQLU|tA#2IA{Xn9f*ki%{TW7L7u~oWtCr;F_Lx z=qZ(Q%c!6hJ9-KAEg|LEI^RY{h+IYm(xutCsLW;)UfVdd@%+Z*r@QJ+J%k%PNz+*_ zHnXTRFE2rJEj(U-p!l2MzccY#hxku5V2v}z2GkPN%Y~cY=%CH+9GW^uQj=Dkfm4;b zcC4t;A!C7Q_>pFg_@KDzqzC5v1=1y;o)TDJ=T9}_6rcl6*P25rrOMy7s${mC%4F&Z zcbPk~ddH&VVHo!86*ogDfWA>N;1QDtHl6Yr=L@fTpNyMcIJdd;&{sZSg5n@jcmq(7 zsM4tgdnI6VVHTIKi#-wPWv{5TV#5f;aH4xWw&rtDZ^R--`M57FEY6DePpdVO3br`0 z!CO>98tZ#)a$8Pzi2C1tU9sRC$ouDAJGJnq{-Vbh&)vpPh=V~kWa`{UN?|9IzKu7h z@_~ri5pL+r$hF$nc~$wg??hIicFQqOQvxg zgtH*^v?;R)e$#Q~6L`Iz5~613_R6v8xq^ARk<_ca%wl#fu9* zOvbZbT}ri)HVa?2?QYMh7{_Wb@h(wYoQk!QdPF*0En=DaDYotAn}?{F-$B?sK6p~gtbl?#jY-;hFp$AZ>h`b3nAOk7CUw9P4!U&?{1k_$!ygNsnO+96Lp$8ce2qES@n1!)BaWa3A#f z-75CfnIn$H7xz6IX7LzxzGgeZYQ@=a`nty+r3mQAi!D{aLYj|iM%bwq7lmzW@-D+| zcI@!8T_NacR8pZy`hG=p0-E(olv37DACa&;3Q{#URljd}q4b&rsq(xCfM%=vvUFdqM%hOCoT;0`CRZp&G(^(WIkZ7FOK; z7BpO->!)?H%vM)PHSOQzN>NKhRgs+&KeQha-7Z3o!_6;(_nuQ zb{ku>KuAU4C|oxh9MV{}{WqVlMbhQWw#VAILm%Xic9TOXiMf`h4n60f>w?2O!xpYc z+hkDs(TU==aI%8EI{_6La@e`-nh)+!R0x(*S{Ef|@i5LX)mePzK*D)D+^k$s7Gr=9 z!CcXDGXUhTiLk#HH(eJO`@Zo=XLbY=F)650+__QQ6c6YCXHK4CaT`@D&a=mHSZJuk zq`@n%Hz-Gqje%k4n&=^12{+9W$M?6-W6uA$IMjSr!;|Dw@rTd9FB>8hYDK+Ff&TCu z$E4hu_h!4uQ&ede3mKzY^rL2x;i)rkciljvrD>hyZFYBn*gJ07j46|YnFeK@9Z>YI zxr2e#2Z-3^aTTKW)(C$%7J&d10bRfW-r{E`6LPs03Xlwez(sY=VWA3ZY@ERkOL1_* zl>Sf*GiBI4Z3^_oaY`oF9sj{Q?P)SxSrie(#P2%^x5wVlEd(rZzju6L4zNlRjBTuCS-aGV(@jUQ@^ z^?`HslM}nC+_KGDA6al~QMm7G0C)M|GU?{r_v2ad0`<3-`}1 z>6f7fkig1e06Ao2Oe$jg<^;a}<@c|B#_+D-qqy@@4*eusZnyhg+8{oSIOVeUvb2m! zsj8%;Fk&5%0W!i<&IW(;39p#q5GBJMCW#+ZH{JElW8z?qamTUV`q&fX|H#J101l+C z|1TT9kA31eu3+~P)7CFAH!tFR{f$WI?$Ddj zugLB=LHLs_mnhV?;?P+OoCW%!`s2ZaW-JD0I2V_C`V$UBcUJy%E4Ekn`lu|O7E;R> z3}evCsCjAljp@=uUo#t$7{cQMpUi80ph^KwUjb@b%dAS#h$j*l%+i-x<=XCBnOh_U z_dsGaDZ%uc2AtpS=zt9{L8TqlrZ8dQ+qKK`y*Jy5Zdn%x6nXWOg#6frvuS3p;6; zT`$UIrk?^c=@RM^DtSu@Kh;3g(1WKPXQTFt?I&R?r3~E4;u9S~NIsxHu3c-Kw7e>| zV}1G0d7lzuZhw3C}a>mQh1ge<^Lc$xFhvm}EHafZt$oAWR!7 ztJ+sXw-dHRG#BltG4H8ZSplGVw{qUbG4b1%Vud(odmB=e5RE{k)-xL;6mj}kSQx8} zwf80%E&JY>zGDe6^^86x)Rnu<4+m2wFn*6myZc%oD5hg3D1%4F4kg)>4mTZ9Z=CTQ zTw4fdQ5jci$4J-UHjY{AnYjH|lfYjKX_nn}xhf*o%k)(0SKz)QNuinV^Tf8&@}!@h zJZ?5s_yaF|vFL{JXn3q9v%rq&bdeu3F_2eDdT8i>CedfW(pyZ6%RLSHBO72;(EXG) z0g?s`gkHW_yd{EtC)GNWNM2=K;|Ryeqt{TNxOcmE?AS5GV2p0Jtm-z21XTsp@yRm1V2=v8+E;r_tI0NK_mIkT2Q9X*b zdbH;fZn0})gr!)=*h5j><<2|ZlRrKRe;sO zni5T?B7tQ(3(+N*iY9S4JJN}#FO1J1U7An$vh246Gmh+(d*>SY8n<{h$+^i9%B;VF zCTjy9@I;CNl$D3s%!&Lry!`T#L(<`EmBv{Cg4ag{dJhTAzY`&3k&NvY@?=nMOPueF z5PN6lRPoe(O-bim)b5(5<)0}4!4n}mgvKBOVui)t7@lO=eSj^E?`JS%JmKGCPY=dU7a^QP z%8x49W=ers2QEeJWu0uNPXAo;;(PNV=p;X4fBkNP>L%J=_gbzA0o;;!<}9_wXixd5 zFQ<3*8A{|?x)9)ri_Pq_ToPEDo-Iv0acNzEaXL+75+C|(5OnvAJABkTrx=3zxA>#g z1J}$fP(+KtSz|ls;w9vBPqYb>$zY?ZbH^H3Ic3n^#+LY7x|$RNVLKal4^vkut!(4# z*zbMTmihNk3tE9XHL{%0J_wV`<4PY^7IUcYq-Hnfow(I*b0JVWfziNEOmmouQ~cEC3)#iYraTs8HpJzDJDhwR1&c%* z4p(Uy_`77=ooC~rr*V_%**_fj;CMv+0(!AmxdoT=oAx(s;CI=K>0&Dq;oXwmumAbP zsV*wzL^j*FB1RV_JRGHC7a58pwB`jXuS%RaV>$vPasdIkp_ZEICzD#|cz9chRYj}tjPKy@S^Na56A#cXP0jG#Dc%FjuYfV!dITL2 zF%A7YP*C-6QooSzVB{gy&C#ZPS1ELxO!xQ7r0PNZVZtktp}R(F6b8BgVatr>o|sXo z8mC%3<}z0D_W9z0k`x<9Nk;#m)=~dfQLzc_T(XiFx&gn*k3SG2C$|B-%MRYQUK*QHRtF%f5@G3mQXi^tF*WLZmAoL-min$|zQ z-R<1xo`0r^+|r;?i-GYIq<4RRWD?gegV5>`DF4Aj6?84_V82K^^G^}7k@3_SXF+n1 z^h%{F4VIzpfP+Ws6znCmJu%>@+z$-su$H|}qw3gTydoP0=|s&ZNF`;GNaP8YCrKvZ zlGRQL{g06|4jqL^cykOvluvg2w1LrzwM-z?hEC^cP`L$8Cu@+z3K+QdxO8N9 zNs*1j!CAO$!2G>#!3hfp|Z>#eD@;C zG`OyC7F!z<@1F4$76DgEYUrq&7BQ&2qev2nZ=8Q^yjCz1*SO(Jj?*L+)Y(m~L2N@T zx;QZVUSRv_`{vn8C*zId{xiCiYyBN>>+3{=z5B!vz{t_$pRJ zX+FgC7gnXmN{Y!`L&gz9RrhExXLlnWbk#k!{dx4Fz6 zZ?OK2)$tX0!*;&f19DfthZU3{!~a<4Tdfe~RnV5L#j;Y$Y~hD~hi+>Gg09T-0#2c= zv_GNASIAc8(+g?P2(Wx&XO+Q0ydUO^3Ae8;q`^Z4*P+xgu0+9pnAjo>T?cSEHcLTE z;=TG3k;@0R&*e=kx^tPk8HXLO?!#Be#3}z{{YV;3Qb&}Ya)`Tv5z@JC>t0xgy_P%y z$YnM8#KGI=MiXnZ^hQ~2wep<4-$QJ00We2PE&Az!U(Z$9Rs{ zk|K|?=}jtitlq`JmH>KsA5*Cb@5fBlYIXjpU0?GmK?%Gj3PMh@|Lv|bK*dUplx{e# z%5InfmK01=a#E{hwNfgM&RH!0yv#ldHR=KUPi)!(_KLnyXgzQf3IP3JbU{Chm7`{=Sor zW#N?%q(#Q%j=GLCIZ;k2n7SN46ixtc4oR81bk--+rAg|r*B@#?)b?@8=S|Z@XyQRs z!Pl(6Pnz!;&d>{P{OJn!&*I}BPiML2v3Nj?8MpKp>>fol=;Z2{5mSZZ=4XKcP;)Do1&M* zP)*h4i~(3o2dPZh2YngFH6xb9D@E998+0rN)O!eNmH+o@2v?sfX%d(sB~<$O^%r4Q zk)v4B1gb+%cBizt{O04{81AUZy;i1ZLXRW9TiQOqf4d%_>q$XuqPS?h#1)gP@hu?+ zVGSCo-x1_l%#KgM^MIg1RyVZ3AekDj&uvWh=X4qVl3Za8hdZ8$dsr~$F72JA3SU~U zmtcst9_A)B{@_U8P+>IzQ^DmfiQD7gd-Ypjt1rFonT#@B+5-_2?DL>gsXKJyQ#&b* zE6xlJ$wiPlfh=oQY?kug&(<0_CHp>sY7kuCqhm*%)jNZovQY66ZzhtoafTsO;z|*G zONJ`joseA9-sb*_X}kWlYcO@NxkS_;792QB_lNg_BpBG01k@Y{+V)Tk8)0l9tA~Yfu$5!5rQY!&}$9cT=cMe^glpPb z{Vd(7C+YPO7A+OifovvQTps$be>dJV{)%Jd>lO{oehd)^ZVYI&DSYzN#cM5AVEext zv@r<@j*x4aqFY02@MRij^92!x+P+gCtx%gWiqftR)cRnhzNel8zD++?4O zLvsDu8j9IufMr*lJ|wk}V^Dgq`bR^$iMOdohbg@mbT5B!Tay;G2J+;F+23;myEDTe zMBxI~Wju%5m+_sW%<6_47VX}q;0{@ooM#=GJA~scX1Pnff&OB8%^oT9#<1lBSj`8d z0inj}KjV?UCOYcA8AIpZs&-WDQ9(EZMwP9aj<`x9$=0?Q8!reGye`B(+`b*kzd`cz z5XUGJNr4cYPk|cBXJ-v2lwO3O&@1Dkp9EMiNV{Yz#~IjXiY+EHPoqZL%pv$WdsPX< zKuL}6eXL^5N(%-DK&lbYw(iQ)(r`zr8Tjh4Nv0^aa@UG{+-Z6L$``Ob94h9>#@8i( zIy#dDT4)~Lqq9wKHrwovU;?xD?){dY^_!SRB)7q{*3GjZ2Rx-2cx=;t^%8v1PPvYW zYyp0ym*71fAj>-3m1&F4c|3CLk-Kt7ue#%Q#0BZ@{{$EwqtgNVTzFD}MN>O!+X=LwP=f|j0GpdK$<6x?)EGyNrP!aqx+5H_O(DPGVMw5RXv6qMMz_2%o1yH4 ze}od(;=y?@3yoSSq&Pc(u$KQ4QQ&&KEtp1KmecKZB7-KFaWiukgdOz6L_D#(b2q7GkMX$_V(_t zo>gRRnf?O$I_MNKrA?PccQ-T%ut+ls1`te@+q)U7iD&6{PjgP1)V&fcD@Td6)~8k& z0wpEl9w_UD`*pau)o?#yosLfScM5i^Tpqglv&~);lk=lQhFJ8h%p9Id z$iJY@+hQYOVa16ZCDoh3iN7y=5QG3B3H~4ymu&a{k%tBDoEe(YUD1$4)cV*8NsCTGN;t2KKAf@@j>L8cb$rpl3SJlS`ta=K}-s-m*Lf33E1!%2^&O`aX{H zRV3b{K%+M|OzxL*Q8eiB-_c>L5C9JCZ760>bS)gi??)}wJRn>JkZaaKIP@rtP|OFK zxwe;^8wU`jc3c|45gP^x-*7Kc7waO?qJ|Aa#>SKcZ`&GQ%E#>|TRbbU~mThv61 z8xIrqP}g+sAv?1<4L2CPqJ?&JLbrqff@$6)>!HWIRUeaGF36xlzAO`+Dtsxh6p9Ux z`eny2!dRX}eL5%hHAcrRW8l+>)(YJW3Esbcxrt{JXS(Ng?xfOiOtK*PbLDBWFWtdk z?eXCNtM%pTwj$~cr-A5$ZjPc59}%=!c%XGnc6j{T*0zMue}7Usv89bTL73h5t?+BM zM<3f;y(&xFLrNRQlmN`v1P_KDX$4~j;nvV-r9Zi`kO{UQamjN}9im|Q_SSC3qFI0j zsHVK3^6+Je?ECzVDp+Uu$$+iS-zsqs4VpU>tV&F2XepX4gFAqg8cd1O&M~}81Nd_&?(jvcpyE7fstzNfeJbxnc>YmT*H3CI zFI??NFBrk^3W#O`p|%fOdp$YLJ_yRV)0(C|w7ha-(2is$_jc@V$Q~_LFSxz9-Xpt7 z=m&>>4YIHcFpXtBFbh%%{BI2ztb_n?h!-mi!oxmLV$tj0a(XXG1uh1da1c z+Ql$?+~2(j2c2z1>+*;~7O{^DkG^PZhQgti*^+1m9lX%wm4?m*-2UXqsIoz%eN?y! zB?J3;S~=o`JajG2VLkKU(?F`RR_4BE`Q!&U3v4DGhRLNwZK?dt#Q_MS>_fwWaA7&w z)Rk%Q%T>x8g4s8)b`?a8pm-LPNpYGt&r-V$3&4#k-Gn!z}sJ zb)}2@u9s)=7nEQR@ym@nk(=&-q{vVy4As#YHoeg+uYn9hIpNZdy-GF40f=l-4t`zV zu(4q2|Byr5Lftm&p=Jx}-7OFvhOc0-W|tKbZE4+Aa!SA}42OW85MIg0*bpHW1b^xyFD$0d? z_9^N5)lYJ-8D+3>yQIqVzpMSp=a`^$mymW(#w2*MitjK*BKil7&8U0mmPnj+IPIZ%kYd)DQ$;92BOys6+81MMEF%|kSQhU`R}V4l^F zbgw_lYxKs^^1lYu$kFSef#y<8QDJS}t}dh17(;b{z+0xoDqbvPgIJN=7A8yu@eeO5 z)3)_N!0tfs2yC>Ct~7-=UfwWxq5oB;50My@SzUpC(h@wbv-l<2wwA)rMuL$XMzfHj z*C6DTuF4pFiwU6OO;!%sg|y^!GKOjwS;+OW8vzR3eZA+YYoo2vTRTGNz&G~cn}@mD z(_RkZf}1L5g|o$5m*L)0*L@{zo6&MbRBUV(Hi&kvAy#>}O6}g&%Zl)3879fQKkqvH z*8A{EOR-Vr0p+hO?rMJVLxt=dQUxt?T(At8j{Jp{?*cw2NpUU;q+rye#N%BIirTAC zX*$Vd?3PIJqCUaT3%e8&)3ffGwn)S>XGEpH$EdkBc&!k%Fyx$z%ezBh_QiV%Qdwy= z`9gQ12E`nR4O}zsY^M_kHc$STi34RgZ&%uMpMtUZ;VXoMkz+ZuU{U@2m|92efgpJoNq;zX49e5q)O2uZuKPWs z$xp4NA+Z8V2q=bLa;ZL>o=u_O;QG1=iL@^o;&y;=plFV)iC8+-0dr&f@H#&Z+E$!^ zvA$~9;gKKIf@XcHYB7DCm}q$XY^MQ{9Coa@48K~)Aart!f}(3y>x!_OKYr%+8~@yr zpss+Ojv*h^Z;>x%JkPu9yQ0@6cl(}##A^iljf*}t;9c{*SmQ02Vk5! zzR5EK_L*`ZA7W_NYZtzS);>S)M^=(K8+rN5K^H++iI_csT9knh4~1f+fN)BJ7Qt_H z-3qmU{Zt9>&!>;=f*IEHfcb7}sj`N`;EniZLt9kgfF__lfUh!#+dy1sJ$}p{fE((n zCtSr*B(yNW=6HIEg;Zfh)?08`UdrJ5#JZT=FC>!7pOQ@~iD2Q2>cH+H(gWc6f)&5UjSw_37an_;piE$L`5tuXA>+*q6f$>Frd%fzKXb^-X<93wKXaDXbqBp2v zfQ+rUQL&v_(3W(U?5RF3i>qD=i;Id+K|>i=1MgLo8k%0wbBXi;;X_h;jLF}*sr%}3 ze(qI1H3tSRUE_UTi6-UY)In4ZgJl(uD_Zly=fd$!+KuJIK1#xw&AL`;&T4iaHgvj6 z)blXG+pjByU{z~P^kudSVScu92DGTxQdwsYl0M^LUjlUxnpBF1ov*cxL$>;zG0aGf ztc6j5J+l=j?@j?3r=w$fABw-GwZ@iZEEZn1Op#VHM@Y?6=?~UNKpOU(qPj#3Nyhyu k-6sC$jVBL)q}p@_i2)2+ixjtPASKY45y709IsgCw064B`+5i9m literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-9_hu_14af2878d62e6e4e.webp b/public/images/blog/blog-9_hu_14af2878d62e6e4e.webp new file mode 100644 index 0000000000000000000000000000000000000000..b45a65b397fb2b3cb528cc6237b898c72e9a16a6 GIT binary patch literal 46014 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

SzyV2pyHZaDM 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 RDmp~0xhKJY1aDjb0089}>HGiy literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_40eec1330ef232bd.webp b/public/images/project/project-3_hu_40eec1330ef232bd.webp new file mode 100644 index 0000000000000000000000000000000000000000..f2bd4689fae70113ab8f9aa0504bff32e3f8e368 GIT binary patch literal 9970 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 literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_62a13caff8a630c2.webp b/public/images/project/project-3_hu_62a13caff8a630c2.webp new file mode 100644 index 0000000000000000000000000000000000000000..411bea2a93666a3448be46a392fdfff91b5bcd64 GIT binary patch literal 28286 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 Hlz;!(E`_!Z literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_6ffef74af2881d50.webp b/public/images/project/project-3_hu_6ffef74af2881d50.webp new file mode 100644 index 0000000000000000000000000000000000000000..88d412ed9bcb9e6001e7fd0e139244ce3e7e946e GIT binary patch literal 9102 zcmV;9BXQhPNk&G7BLDzbMM6+kP&goZBLD!f%K)7LDp&%$0X~61n@FOep(LU6`1qC( z3F&U@|G?`)_Bnd*4?1)DIM$r6+5d6f^CtTT@}Js2b-k?Y&+9+5dB^apusra31N2X| zpYq`Gk(+i0C(efk9w!D7xZuQez3pk`9=F1 z*iWV}qj&9qcj_QON09Etz2rJzk0ITQd(Fq0Fo5Jcv2S?_TS?wSrVv`K?<3L@#*@5< zOVeZx>VVT*exdHgz7EeHyB7G^{PovSz!vjra;yB9KmB61VA<`e7<|`1QQ25`V&3vS zAuMS-&90TYUPK0%14|*N?a9fE?4IGe96(t9&vE~vbqUyQjV#(9>2`Tu5a;R-cs3D7 zi3htyrwVGhRG(MZgJr0Krk7M?h+uZE2mmrw{`Ou;?Nwk&=evuhND&Oyy}t#o4N8$J zd&@!eZly{Jy<`RCYtwE74AXC+yoc3k79-LU#_Aw%GOD>yM!0 zx)IQI$I<$7Ark&CJ}V45+7Xc)=hQud^+V+gkOfW@*dH(CVx=xPdW7pHQXev7OR6$R zLni9`JhOAD-(OU>!MPTv7R4|HJ7K$UEnvh*@bB_{L^G!z6neo;0v7y}+3mToM}r{9 z;-xP-u>bb83k0+tQZ>jnwmyB|q8-?%{k#qC+kv@Y}G>a-z`V8uf@mv(V?TMqvd7nc=R>h zTeU~vfE5G)b6~M!k@J|IVORAvz(4X~96O#qP66pC z;~2MvXbNf}C}P&~gNPMVYVbTTxJP$uq((aE&59_q#@}iS;BM)Y8m;ih#5=Y!N)x4` zS3)+KN8+pf$2n$dA{KKsaE_>Be9OMncbDW z)9nsKvqg8DzFXCrg$gW4|K3BSZ}pw-Q)%&?kv?^Bh=-^;V~RydAx5IWNS(Xv-|1id zfksYfKC2kSR1E!rJY+CrFZmV(+q->OzkK7lXupC!pbU^4hkTJ4Bx2}#=k8?D%0iv| zE&Q_%$0{6!n!;^H!+kpPiwv2M$7mQnaqu!6m`iEMz7RLsq4EUvq=)P4;oSMw~E{vA7cQ%T_L z@=Bv09rG6BGqsmPot7*rF(~_WD?o&B0WI<>lJ%eLzgX08cso3Q3Tz%xnrBMXwYctr zSF&lX9uxKF-8mA8qKg#TThzfDs+oWokQj}&8CkCvLP6Ou+9duX3xx>ejMlUTN77$9 zX~k11Vb$a*b^@)BMQYNU58yMfd|F<}dv`24%D=>EQ!VcysZaml{V}<9 z$at>;1+$>2w%b#JnhB`Z7U%i<9-F`gfJUdhcaE^CE5+sx_uJZ>xSG(ztL~iKB=*}L#YzioD<{QO|aDDp)FZiYX zKS%g*kj)|EObZ@cN)gb~Z)ek3;*j}!X>XMM(`eSb&rWifvHDnwUS6IKl`!}Stti%Y zTVfAR6$JN^U_<&K8AACYmIOLKM`vxec!%?**)fQJSZ`ODp_+8=S&|&D{^eX(AEK)t zge_Bc2XgMDMIrDJdbcA8LB2$I;J)RlNA@4+L~FXysJI}x_9LeP;f^V$?E-5MSt=w$ zE0xW3r$xk-e)?~JsYb_)EgcIm_TAFUlX&KTjrBn^Qple`Pno3fyi&^n!AOVOO87Fj*bV1YHg4jK-hVSP?{zx@RkrK4 zJlQ>n&4==bPa-=KGVAARWzhy6ndkA(NXg7~cQ1{ls9(mp`g{&jl9#>5}Ih#*{x zr}2#E8Z*L)yvx4vC=xwQn&3GWN<2s{PtDNG>APd24L$sT1Lz9$aExT_;}Z|;Wa*@4h%M8znqPug5r|PI4%@t8+V`MknBHG9~3{Lqw zf~Tz~$G_HFlaLfr=IS~LAzz?vB7M&CB9<})$V|7(Dyc82dP{}AxX3Td&3BX)OtIkb z@&2>0AbXnU6j=eI--5mZPF%2)%I_?&g-AFXRsL?5-G2fjGx{zVj|($wWW@#lt@Lgf zfXJ8jm_LP57o*1*OCtWFUhE?GbjCxLVLzgrjJLfSKpqGufL^DO_G5wSNqNLc9&Iws z{1e@3`U7Tm(2=>@F?*TDLezBKR6jW9q?Tz=BrX@wb;#H)%bM4#`v54#dz#F0m8c^D+*XR@LL7#gm?7yf7=$KcNvFR9JAqlfX%&m}RQlzMy-l&|&cv#upEk-nP- zmk(6Q#^~!W&KqhhetjjP`#N;ORQBXp<=J}mdAs-FBzgP^Zoh24E1eSN15Ha;kI(?o zw;cH3Y6KoF*43FMc_YRfXD*0~CMSfMJ30WsV{u~l0LVAYiAA;SSpuGnT8HQfmvJAw zP$>%1AC8_SdfhfEYH?f)blU2L+Fq#Y2vr5lB?p*_Ladd(9OM_CpRbn);mxideCEZ7N<-AIvV9Z4XqfzU-=5_(U3N?_i+!PYMMioU`C)h+${hS1eJ6a3!% zxV|ogz#>bpB-R1c4Q4yAxzY#Q(V+iLk-dw~>D);FdG}?NE?^SHGs|Mm`QAny4E)U@ zBQ7bZnE2;dAt9Xb_(tPWu#k{+Zp^xo?j68&#JlS;$pWG5GKXeiu`Sp=gYy-r_AqWJ z3eSy_Go0te*#i3g;8X+1&ASYETF2oRXW@xT0Uw4u7Xjv zzteUShFzMdz=Z94OselSAl2es1yy@dRZ@_n2hAmPc3DO-1qs_H+KjV0bUNH4F&NAW za5tc&&$(5*jCD_9=sgs51#Ga{UcIIP#QP6AIM?lRgaA|?5}JuDWG>n9_O0iFM(v!& z(i$Jp*;GNX{S4NxpGRQWi%fQ1ySIE9Zj((*YYryAn|6s|=8&JKA^TsQF%~X4F1f(v zRSR|tc-7RArz6>3l2uBSdin05%T<T7V=iPM~R=B}+SnsF46Ra&U4sHr&qz{u_=>t5y?bEh=sHz0#p@&9d!jUCfmxxsO1oD1xRS0*oRasUgPKef}X zDG~Kb9PI+*N@2rQ#I7=YIy>DLqPenaM(dn5Dk<%<>;v8WJ@dzu!X$Vy@K=!AeQfKr zt)Ah`Y-?38!=|_g@ow3wV%7&vgT<;QUAJ0}cv6(q)J9Ti()Wz6(nix{D3j`P6;*J) z%6A#i#D<+|a*{Z`CnC~IV!#VW~gz+Di36zkS& zEOxUCse0y4kHuH?GKYezkKVA6Oz}_Y3I5)X;zGaz)MIY#fryyl>MC)Ej?k_k*+S-r z!lSB&Hl1-4N*OAIeaKq&<@#+z0G=kh$xrRYPl^JOc@`jA9Mr2YrUZPi=NA}O$oAV; z?;eYGjiAr)nVuq8(HnszdNp$sURwMSC3J&0=P|7gc=_JL@$RvqblETU6lE~>s+r?U ziCz)>juC`X5Tx`0%4{)P+lB8V2{ugvHlg`msPr3j-b3N0@1kS1ZulE{a@Lalx4&$E zUOY(x1mkLSrmR88b%)0%7PS48!hV{1T34+U_6F!2hQPyK^z6ezCijS{!gw1x2+Jj< zxd||Y|9xo;k1x?JpbROX#2uFcgZ{wQSo01PdqoItb*SgZtm$VmY(8~V#J=?`HTBZ;Fe zmWVUa-Uh-g6xsG-EI4GI)m({z_bZrF+qT^8sd_thdcb@!SLIbMFmjDX6kPQwQ?B=JpF-vx*8vaL3d2rrgT zrrt4Gtuz7K79{k{T|g46qK5k2=a0Rd*AdxULk6_7{xhOP5XuJnj-VsG+`(QvAzxNs z;CpQYgCM0%TpC)oe=S`}?U589_4@SI2mrJBa_DGji$d-&U-I03$QLcE^N@o%yu`o- z_b6_dw`GFXjqmdQ*piESEO#10$oq~ZUk;Xei5xg4ok!5p_Q#xaX7PwE{-l|(gWSb5 z1W&(K-IU}aPi2h+a$_y)t5_+A>Bw267C}QWR7Zs_Kl5Y~s;!lE~8>|n~ z8JyMD0M0dCl`k|+(LPX7%&9GKpjly$skVzg&@z>Q;WBZBlFv|&3?Clg&>thC)7Wm&hwasJ$6T#~k2`VlLMal&6^Y zOC`5ncHPvJsS39v^99JiinB7A}8YFpMRr*k+8}6d_s=gdw{r9X-Xf0aLxw#XWDw#~fF1(=t52?VI z0X8R)Ro+oTId~tB$F3>AWj~(p)|vD~LU)Ey#47hPsgK;%yeqi-*8DW%;WuDX>WzHo zVi}J{2S%qhR3()vxnZ9`Q~z0DD@|-=T9BD(i2Kr}ZSRTEu!cl})%V8wE?+4qb~nGf zB=39~CU8|c9<>~hHTLm|c!p3OnTSelc;ec#3{6IZUk|<2a>3q*moP1&+MYpBDZH_W5pl>x_xop zeH^B=RAXtpfeL5(pn@%e?YO6(11g@AYN zGezZoTTi%EsT-a`tI^JFWJEZ+w5dnEmj0BW*FIqL?w8)DRg&38Ib-yEE5Yr~5NC41 z#^q()<~_lbC+80)8Pn8jx-Cd8#s?88+?I3I&wmaG;^aIO*mgIGZY6PvE*}lyaJ3Du zSQ89#&h>u(R^0-Z@JjfN5V}oBlzPigVMOJTzZQk7t1K^uW}hSNh<%!8=hMZ_agQCY zXh!Dru6#~6Hx)YU<2W~#zheKkab(fl)DVKnE6qh&iZ)uNU^9cb5M}d}q8HvT#s546 zfAzm@@@x#%!Qwsw#Lc}KUFg2Hk2LP+qlh6G|BXwzdw}+%5dV9r!Ze*bmuY!d*y~a= zH}|OihWt`f3gP65tnM`PI&tI3#>qfk-n_+oVU4c3?iY(zss<}r!W(@8#Y=><&jl5Qo-G^EcYmxOrZWsF$qiySH3JBo>J?6issZt#>t0iL0a(GI zVm8e?CapKv@p4lM`5xtns>W}}M%`)x`1~IQqOg%U34OZXf ziu%jJKO+-*>sNigv8CiAT7>2*&a$T40fDXXQZrKZQ$@4_H;1Oei_b`Yfn0raI=x<9 z?;S&UaH54R)w(J&tS(kue8YT=Tunf7+Y_!v+<*iAYLx*xJNB=SXzyZmmm_i??Ynl) z0YQphVxbM8Z#^x8{xNq^r+Z(m4p!#Oj~6RKiJ+npIuctg6EK$=ztttFsK~>vO`T82ihY{+Ij+D(X+l)gzDv@=V#cau4>zpREg6 z*$;O8vo|rZE15!kFgEo&6YlQdo3Or7B08rl&;?dy8?%OJbYQ+7KG&2s;Br)1c&ej1 zw}u&L0P09hC#Mih9s5G{i`6C0-it zE_9MdEkJ>8GKs`9U>6+3fZrc|*WCCf8wz52=;OtB?yq1NPOJ)ZyNa;3reYx#L;R%| z#l(JRIN6|8;&~)o_y^D74terupQNNY*Hcs+^s_pP=IP;-J{T=FWH~8EfM26`F=G8ZwvU_!37)&W;_uElE8NLuwp8@6VvHNb1t2xcm zu;USTJeQQ~!|wNfc|Xb5A`h$7N1*^Qez~>7=5j1LiY+@4sWyM~a2v*3qNC?t%w&<+ zp#b*4uV6o6QuRi#SS}>^?=KLMSxC-`;(8D-Kf;1RIWU?8fxbFDm_@BvQK5jAwt!JV z0^K9gK7s^SMY&)W{?-F#~ZAHq=eZL$od0~=u;CI_|IeVQytkiP& zlgGV=(yaE6ke`fVXb57^x#PqKg)>h& zt%+E9+@8)ko9d9b`SI)m?ele1JTFe*sR*1mT?KI|E z{IwaB-zzi?P%JLQ1q>Hid$>>a8Tm#L&=xrY7ydXHOXm5IbYWtt`Y0JO*0Q1bJfgB zDwI)w?$iAb!T~O6UH&esUvGSR-Wavd7Fk?{X6A4Kjgl^g$kR%s84EP$70`L8p7BiK z0mB$Do21qnBm=$O#owDSt;?f9Vm|1QRe^&AvHEbuK*Nnn;hyj{0{Qe?5kbxpx3n>n zSZkM7N&$Fm>_QtZniErIt;!7{kuW=BYhKIn-LLu}_&x!Dz0(@#5l;=v?KbNi;Uy#G zvXElyHpM(f+(7kb4($quP(jfX}%_s>6NA;Vv@Um|5KJ zXG};wKJVj&kLo{}LZYVXsXpyz`T!~4(0XzrtRh(bD2H4B5U&^v4aGIo7Wk$xpw{8 zPOWx#Digs>Q4SJa+4r+QQ9p(8=|K41mbF4M_I)h%pk-y^tV{46>hoz3%}T&+Ye|X7 z013s zRTdyS2Pl(g2g}9^ak!&yrt~E_z-2X&#olF!*o?mzi!@TT?Skgx4E81re3{MbW_nXuxRvm|`l zmo?QdZ8|mt>_M-8C8wg~l8DHoYGe?j)g2&grDj&CIPEKLssAc+>o;kGbRZ+iZ2?6M^KTb((br+4yq4#87tW@)p z*nXcbhMecdth!c-Lil}`gW}luzAX);8!Q-j8t@=lqc&afR_x?uOP=74X_zALW3*rq z0`&_p@st58bOIW?qtz1WrwJL`0@}-C6@?^VFq$d-UOj+SoLPl4$mEFvIdhQ}{8icm zgi!#YnSvJrBD9~E!Q$J6CDlMjjEiO(j7ef(mH_+&y?QPV3es}atzyoblzC!zT=|%h zghHM!k*{8VuMm?laiWwB@6iltD!>i*63=jH-{m(-LtCevH2&YYlBl6%ufKWOZ&to+ zSF!Km94Zw#n};mHl6^d|=7!?w1*{4RQqwj+9$5Q&8#}QztM&!}?U48$-<}sLiwTT^ z*Q3EH^CGL6|7(z_tZucNv`E=7u@xj}oXyA>+Rw78Pvn~#*blxTI7i{_L~MKID=6!A zz!7#`r?q3*UfkDa9aLVKItk=i;bA>Lx_>TnPe1QPpj# zw1$$CRcG2^p|y&>TUOu4)3(n?6BxNU4Ls7)>`+Z#CO?9wNtU+$tajA6f~SyOQVR|c zRV=W<@Xj?5yvJt5J{sV%c-*vRM{@rP91A&YyAZ`a8Q-Uajt|u+E|NM(PV3!wduXbf5tcSPEsRH7}Yjm<#ke9BNGWAIWD6YS|I`7m}g{6+YC!wRXk zRKbpF5V$*aAXyx+_IZ+Ri5{(>w7hc1A#4&BuUxtbQl69zjEnWk+l_uT&|aW!b4k-E00UX-F!|-lOfO?V_pk3ZVjd@6 zsng$??b9PH_pmp)93eeEXUX^)bCei*w^0(r=a0Tzk`d5jB?7`9^y(ZO01IJ;I-dGv z9kH=(k!$lmI-#zkUaV@(p=z@ASQKo9j5eB0%lS)P^h2I^EEzzDJf=w`3BjN*3&JT< z{bHwr{}|V=xl8CVP$B+&uJLn-W?T`If!%9p+}E6GLB2d7O3$*4odvp>zTP?)+H)(s z4W8NnUIn*?kGrRQ3(Q5J;zF62;=pCAi7POCUr&e!C~&|7b^#9SP5~-r*B}y1gHGsS M_#+H@R#oQ+02>9l5C8xG literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_74a5edf51d9d285d.jpg b/public/images/project/project-3_hu_74a5edf51d9d285d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fdb9bb2ea59b6a199de3296916488ce18542adad GIT binary patch literal 21819 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 literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_9535a5ff19541788.webp b/public/images/project/project-3_hu_9535a5ff19541788.webp new file mode 100644 index 0000000000000000000000000000000000000000..96fb108bf2a4417a92c60fe6b075213a794a0242 GIT binary patch literal 17176 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 C_G9<} literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_9a71e7d65d0c4faf.jpg b/public/images/project/project-3_hu_9a71e7d65d0c4faf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3e1158cb89d037c0e00be5008ec88a72c1fcb86 GIT binary patch literal 47264 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�=@eZ(( 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 A>Hq)$ literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_9d6702f14e8f2c3b.jpg b/public/images/project/project-3_hu_9d6702f14e8f2c3b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..375c49bb7b30e00ad250de62846ff3012ed67160 GIT binary patch literal 92544 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


c2~Xd8$h;>g4fBMet_Jx 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 WexOfNt!?4c{U2MswpZkz>Hh-5=2P1M literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_a2e987e158776bbc.webp b/public/images/project/project-3_hu_a2e987e158776bbc.webp new file mode 100644 index 0000000000000000000000000000000000000000..dd598c4ebf68ba1411761422bf52f817548f9279 GIT binary patch literal 19392 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붻Jdc6JmuLJjj+~&H8$yS+?zWLfI$~>IaDD( zm1X#wn92A>VT|N^D0)5jYdw5_+khTdaLMu0TguvmlRT{cZn?{i?i=G6GLVuVB3&Pg z3hv0}gYu61QMfah6)(pCZNxF^-JFtd|4em(&y!<%=M{G}-In+ZoZg?s+2@Pzf~fZ5 zuw41*BVLuNJXSz`_=%L2+>Fb-`Z_cww_UbTA95dHLKt0dEL?xE|+LiQRufXICTVFoE=z!X(z{#MBvRRpA$m()%j~v( z)$_KAiaRA?>;7p`SEpS?&VJU;9P9f;nbumMarpunn>tX7(%gFg#Axl%cd7&PC9+r( z2oWi4CmyM%xVXtn@h1g{ju9k+Y3>akbOVLa0}+dZv!vLG-iC_~h?POy^y!o5p$h8F zFw03&oIWb34-Ynf5ZZcuzo|JRUDm?LZWDK&5 zmy9tm-?)5)cW?}iIERq})K@Sb;P!_Wm1S9n@He$QD{_ZK8imJLh5l<#?lnb_FeT2m z%+A%W$<&hhjccKlsLbs1j=MMbpcNvJKFAQE&K)!fZ*NsN+kNv8vE6Re`YBOg700c9 zv&-`|*4>gK)dUT;QzgrHR5xD8Abl`!4aPj-SqX}So}Y2`HS-3u`|+|BICJO|c2hSp z3FG-w5enZ`N zW+%J!vGQC?&4Q+SeMul|^Xh^D(-iz!Rspk8*`GB4@3 zpWX{SBf|IJ+w4>EH7YJ8JE|=L3S-@qSaxsR3OPkR@%~!%ct5;?4+pCm zd>{Wg|A)ZYUWMEAv&Xnp)H{7?Ev|)1`VjAPAznC8-F)u$Qf_U4nPG}VCZ+y=i7wdc zbC$^1fatst92ULcp!rX8qKaXn`NCNIs6hFV{iaz@1g`qWUC}m33BcP!VVZoSAGGJU z3mHHP29#Gd`Vn3*7E;jyBrB7w_W5b?8H4&6+GW(qZMe+vp4-*+YTrWle}1y*p*77F z8cn4&kE(VtWUvI2vr^qc&zGitgBH)GULVQnEE}qiHFI#+x#$MfjTQ%9H=jghB`;{B zlf%g4iEz??^kjPRSMj6wvgS1s^0|Zj-6O(@5JbH`(~gbSjA5SVd1nxNTUG zaaDw{e7Q**Z-(vdK%}!=d&kz*o4r`?HX}))xYCW)7WTY4OGC5X{u2-n}Vc31RSTH8E!shy1mGMq)yb=2KdoQwFn}9orUr zXDbmp&H9~j(k!Zq4sPdL+)V)8Sy)~nz^T5LJHTn6z|NPX@<0#oPP?pRWWNlCcwl7A z&L(6FXf-*v8gFwYI|~9#93ZJu&-BcDgkb|qE!U#{{ z%%o~egq7B9-szV~x@?+T z5wn?<;SwYKfcEG>YpU}0ciSWhkIMO@J{6BZ%>lm_vI?71qKgN_}y6~>}wt)iQ@fROGm~`)@c$H#4stKfX z@uiX(E<*4pyE%{>$#?Fb!1$x&=$tDjkdh1s969&L^Fe2fkQzq)tUylUd#q>PY-g-i zR>g@=>*Y6m|3Oi5=$zxicflF%GLJ}H)n}GYXz4Jg(I|z8oDCRPPSxlcS-T} zg-S5Cl{PhpZ)?0(b=ohj$C#SRseRYu>K@b_2Ar$J`=gkW+9(?a>Xt%QRur#!P0B1H z(3Ui+4MAu-Oa^H}Dg-W@k6u0wRWvTGTGlWY9 z2=|mf1*I6vj#AKJ5{nTe9rCO&^5txwW-lueO@ELdD7~p;t%p!%F~6i$yTS z7@S-k<7o|M;BjN6C9o4mz3eU44gqwUh)E8zRJ^e!{e&8Q!Qp zwjCEQ7TGW@AYdR1dM?iqxz**-a3L22R%Lmz68%x~Cyo3kKImdT3GVH4}}Zy)L*^7ack{=;5URb)kbkw+dDu3@oNx-~!wG)GX^iO?*=h3RvRDOw|1I~ey)-vb#Su@7CDpE!6Zb!Sa!6i;~%)W+d zru(%DV&T>pRMQKv?EiLMe}h{t9jV9!wU~;BLMcbtmB*LKxt&9|M50tXG&9Q7V87r~lRa#qhQMC;t!bx4{SP zm;Ucy5C1-(AND%a{V)4p`Oob>FF$|(7x{Pnztw*yzL)mb<7e{^_B?9!xBZ_*Kc4;j z{qL?1=|AfKiSd8sPx=0!znK3){d)E2{EzkD<-57GANXJNf5&?Q`oHwA{D0wnU4Cc& zxB5R(KE!{%{~7QB{LA|{``=xE-2d0{cKY}GKl^{>|1dtl|Cs+^|Dpa9{a@~P(@*yQ z{Qukkw*ABQ>H2T_fBv88{sKRq|AO@5|NrhM_iO+E{?CS=+VB75tbp>>rsV#KEvxge z85BH{cCDc%(}3*uoRF7Udx%U6&FgtB#T~{?^fNd+Wl3%&ZpgU1$EJzWgc9fMc zbUcx0y#>dNQU-;Gcc}V}qF{U?S*DUk##?##3x@g-K($Iz#FFO9Tm!bkAWoo3WVYj; zQn7I4WlBoOK;q|$J}a7LoV5mk~gQ};ze|!jXP3P`y z_`bA!zV{2llY;D5zDD0K`(daG90;BnKq!$Ly~nz-*fk^Fh~2+kTeeB$@v10W{%e&M zp>4}_`VJyK!7*IX5DW9Ptj&;wv7i>kJr5AgRlm*xT~_05<8m<#?``qlI55bA?sYW8 zq0ER_&=6Hxv3=af`u@QGiJF0AB^QDyv`FM=H*nHu^5H1)<CDt64>=o!q*%M#arG4n(F_uCyBV@Aev@qxq$OmJPCv>&f;ol1j7Emzvj8mB->b zc|J@*T*<^Q#C;Dv#OZb=nck`UEevd%>pk$fpjy$yLN76x*aM6at7hGoTxufKv82i4 zS`vJ&XD>iituMJr#blq>0b~84st+$ZTo!!s2N=RPfFP-#nkJyPOF!BJ2&!2I+7+3! zr9Jofw~5q}(n_97*M+fRpfm8~DehS7@hZDX9zMD;{TBx;O|`0eyGFxgKG zbRJ3PM~!eWS~9i{!?Wc~sL(qy%ZnWmAH6WvkG3U--{dz9Co|N$Czhk+aFO_6ovfKO zVoLaMuHQxfzPlJNII0&nU4ofc%>H?}jnbwimnE4Mr9!7}NQwq877$Nag9Py~o)WsV zGA>FLWVOgc?yG=39@>423b|g{+C9h(vmXoY=8g(DxiD&8pj*BW*>jWo8~xj9N)dz( z>o6i)Wy>BL)g1tAwHdAoZOw555JTKuJRLq4g*^$gC4eA1GAiec%3Z$O`cNdj0vSSd zYGUfc3ff7&rdqXG4H@JEJU5TNk9D{78FAOgcQh|$^hB}A{wI&^n>^a8!NyJ7nL##i zrXP`i4llnLpLUnqilUm2TY%U!^Kj@JLwDowWQpOdXOIf~)AZx+aIg5W@v9Evz{Fr6 zSoo&icPbmFsq5p^Gv)i+i-he%P<84`S&FOG2NEruz=b~~M0}W951-(LFE9~1uCI*D4!L+n z7Q^Cn5e5Xm+kFY^k*y&pZ8^9W@ zh1ow%VVK`(tS?>S;wbdQ2G=e{IiJ6^O`n)9bHf`%={LIBOF-q3Vu1|v*OWxKmmEa9 z2jPe{PBFN5HfugyTpODVkDX3>p1hf#|Jg5d6N`jp*zbWp1S_#O;_WL%qrXaxnnUd9 z)Tu#w;BOc#Rhqzg5OFX$0Ti04`6MDP_-Av=1@1goh*Qan>8H4pt*~{}l^dZX+c*dL z;?+<j?HRG%&bzm74zZmJBHS99Q17gn~_F zmbH4Ni2RSg>L+)=0RHz%@cp%br?r3bFn+h1NLJj}?vf_>e0-xx1hCrU@ZurO%YG@o z>=(fFeN5)4RL@2(InoWzC3+;NzA-{y#2)uRO*Dw5(VYPS~5MpH@!Cy;2|UX8>aLm))z1Uo&uUfI-$u=TC>V`-iSw9XqU*p9A>Rb z8i?_Xe8ahO+UB7gIOUlGNd_~?f~HNImr$xmPKFm^%yoWuC6s?{+T)nG?6nCjf+({@y&7AlezxRNY!?)P5W zI6u}%?_zMtlI+S;4_otiTz?g}p9pe;Wi_{f_hMBrS!1M*PX_lToMRWx0{g9Iz0_0c z9f5whn-lxff3sUy%Gk|KHK|-U%L0*^KINDKuA_l~u8`&Bof>3H?RO^+cU&6LYCHRY zwokTIjCDp=E<$-0c4H3Y*T0Ptx0k>@ut%5g*B`OhsU9Pnl2D^N6s&yT(x2+bF_>5G zcol@0vLr7rXogHJ_Atus>-Qa!0(+QreayGfgsoLLG1A%lyukcVfmW(J%_ky(oJcB_ zXnJj%WAf6|g&)1lY(W$!bSb%jdg1c=sTslN>|Ci+Z7vUW{vLn<{5Mcq_c=$YP%R&u zJ+gaQE`(&eg6_F08#&1#gZ9K3ljb{FoMH$w`!q0=_{{>9ZL-^d*@YM4H$`D1*PU5L z%&S_NW_$N-K#k|yokuFt+S^i}PTDhCldQr`d5*qP97jS4vgU>+s)BAo{=QV}I%hN=J@n-PXJ<^1*Ws3v92ww1BDW;R4 z^p}-Y{jFOM>9T(gMJu$YsI`VZFM`aOG_JPmi6$5sjje65oe9;T4bB< zIfEalv`YQIuoZmTJIz0N)*@IovEK)uorSIg{C=ENSjirN$)hLEr>{;x-unssX@+!F zIAbeul!j2r`t+4U^3O5L;3|qZHy9_;veaqwhPyHUMV_yDuJW58E5(J$UpH-D4vH^e z5*#Ym6rc5&5EGdv84My>h7GZwYH*JgOie@R80m)|A?_>YcFE8JW5e7ong3!?G6*Y zD@9nEX>EPJJP*gd0h*^lW65aJ>&xnDVHR$TR?+&PSUeut!-Jvm_k`th*8O!%^-%)= zL|kVOKl> zgt>X1M{S{n5#*Vwa$DKa7&`qA_t|-bfO3SlG78?v$JAcyU^MuX_tf}w>Ai!2hw`|4 zLCE!f_yTsG&s-Aa;Oda!oT%zQ-7}-d-RSYfEu>b<@t0-qy>!5bUIIP5;^8?tbJ|@k z=zcg0{OjQ@jgqH>exPg7A6hWD>4r z;Nvf|TTyE~`73eMa{fPjDSI1sHMAKFzyWt>^;ITS#QxpDaeuVVeCl;aVHupVM*f=9 zPU>D_go6?v^|p1J^>4ZtVR-y~brf#|Si5~v3{nPm2sm4WiBTtPu09r$W8C)LLjV3# zo+NvDrR6$ZMC~A~cXGyj`z{L&tTp;8^Ugj)BCUj_1%M{+co&bj`n*U1e$uBfcF)%~ zDEXU<6MZ}@kgeWd*w&r05<6t&t+pz)Ziiz#k3FhQ>zXh}o@|*-4BiC-F%N+E}J4e)9Y3JBZXrEmPF4o3-;ue9WM#5%Qxvw=3)4z1+TqQFQc?k1kA9 zHh9g6{FK2D1E&SPv%EG}9sy;(8eQu&Kl-&OXoo8J3x8r0tZ&G)dI6$LD^P*?(??1F zv>Oau)ONbAwzuDKt+?6@dNMXa0s0dUrv5`o6QfG9|yy!brdd*B;&uPA2 zo3#cAW0d``nin$5PSV3?F>Ydu6Wdw!0yHTC#U_|lonz}hlbFGK zmWg}0(C8{|Tc7%mPGHvoK5ovA=`G5;zj&R=Z!`M%w-blWdWKQq|835YZwy{2Rg0+I zbO7M&4s4`@4oD@iWKil@Xq}wTMx<6C3hN~6(B`z?nDeReUM*A#i2*aa$4U3~{IUb( z;SwPBC{qXha}{q^n|%=IbTBUgYzl{f940kz9WRK{A)JRA_mX@TA<{U8NFC1y@E_@r zgU4`#12$&8DQ=QYi|n_o60=B76l*{S?uR3oS1)`)dIUoue#JC>@?=%nikLXaN}i;% zRF`rLO~@&cAkxE4*$3gX`}{}BU@o$};9PuGJC}CT@v(_nk>e-l;p`TJ059?B@ zk0GfD{YMFiidJupiR6?L1^jnNboA2m2o*5dwzlGZ^*T;u7h-_tMl@!$v(e80>p2X9 za8=sZRP-CN#%MWT=R(Yc)|i0@j+y}29{8K-aAP065aiN?#4g4XKz?W;_GSjkTUsla zB@AOC5T;-S4l0-|%2@SsI5}(C9KTymsQ{}brpdi0tN(kmMZYw<<+zLIzsd|B;1Yfi zYetMjbtN}wZbd7_7G=RFaztf}c&PgBViPohBOmFwacF#7*Am17%F4Tt;%b93XsX9s zNwJckDu&&vHSRAIdD_~Ebu-==Ck=Q-VIV+24n%pguDFrS%KLiV$NTlpijr{i01$k;)74W{l8W|Gn1CPjUOC zYHn;sr(q>7tI*4rr2$9LqwZQ{JNHVV%XHk?=n(ZZR4kCdh(Y>}|CaZ6ssihbKKdJY z`gJKJmhj+>BW19KaP@VM9rv5mLCtw{dw&P*Zz<8{X@7lb(>d{{kag6r9pu4H#-yVv z9U|*&Hvv@vgL%0byr8&vt%K2qV&R(RJ8n2(Pr}#&btSp}zW6A{P7S8D!YI{X=Kf$8 zwCSdVliX6niqEWYzzX52G^cgy&qt{ziTFfMdp*YUwLX7JiaTF>R?<3}7E{D4dD7j9 z;-ybZ-sD@|Nmrt1r68sCQf9cpn45)=JninJg;O()TSaNrgT9+5A&ON2)%Qo4ufv6= zK81&^&PxX=vWXR{@I=s&E?7|B&IpjEe@^CQ|5EFAKy@iAnc!gn&%-3-A zpUhE5L;Z2NA&%+S3>|i-z`qy}8W1ffT5RL+RE~2e8j+001F(y|Vf@1ylFLElR)G;=FqaphqHh?VTKq8F-i__PNn?J!d

f;x$3D5eTLcp(38GzG}|fTYwu)4v!Km8Iqg>`N2c#g_Q1ZP0AMnAi&evduo3>Shi)0UxDg91LIS;b&M;TM zGzDKoi=w=;YR3DQIm>E8!8XU&!-GDU)n~f!_K#NTZ7RUvsUP01ACgS75Z+! zjUK@C2jbeVZO(aiCn+RSG0P2le6Il#cJnMY6n<)z#@AuxaK-kFL4vAqneQ6oTAfatxPKCZp=+seu zzamCwsU&~i4{OU(u9T%^ai1p=uA{MkIMJEC_Umk4&EpvS7n^TQBfPu659yW5GS7o$ zf&(&g6kBlNQT2#s-)D`adrWx)InB99Rn_MEE1BCY9~W&t&j>NE-N1^Gh-yAG!qP0p zdP9ESI<0S54yYhj`SH<5uAEeQAy^_4I42!R_wI?jqgA5WHg$|B_u*d9UhP;v6iFJS1qPD(Hj+mK zzkDqgZwnC9qwdAhxiWsi{cZY;|C>YR%cZ^y1tfQcr~r)QLcpP^1-v2`3#o+maE^nF z$sL~8KkR>Th}s}dL{Cb%<1C)w;L9*CjEzZ&QGV)*V!V9J<}k59Q<@@SXc45})Ufvmugj&LIWW zidUD>NBT`^^Wv)KfiHNk@M-Cl@`Mt;J{rDbL|gWeHDn)o2DMRM3g|Es40uydr^eA} z;peooYUZjJB641D!N(!VYOIeKjZ05p0Smbd?Zu)KF4*Wlf>R1JShTwJ=O) zM0M-fUrEV}BfN43AU*W)8?xSQyu~msi~p)NT#Xia7l+}kFuvkxu^Tx7d>5mN5j|z{ z?PPeu`#jU;ZfjKkt~ML-E7pcJ+H)hCX zV7ugvZlAr1R$X)luSRv?oQRxIDqyVn^zU6KyVHLvAErl%k8|8n-^D_TvWqFEBF&i1 zhmV;vM?yO243t7={kRMQZNcz)TO?2GJdDSEGsG7_Gp@sxO?QJ1@8MV%y(4!_MmH(t z6_(Ls8+1Rj?B1JFgaXV;DH%=TIa4`A};)0@1Y znhZr;HAR_Wbdr`4b^)tI<@Zh+avkDlu%`e5lMRH=2d*bYu4FW~xNYN%PBAS44!aqr9_5OxKSIyD zDshVui7Wf4_k1H4?5N_g`r~x@jIg7L+iK&CGF{2=TOh>#avVXvHo+Etu_Lp+6*ANQ zeuBUMYfg#7$2|=3Stk)Pztqrb6zb6Ot;wW@U(rK!ATcd((wlTu4Qu9WozwJmq$d10 zp_p9a3dmBuUh!|j&YGT=@w!`cvw$-^A*aygQX`V0h#*OV27Ox&YT|FHH*^lepvYNVbIe3 zn?kfS#rQXz;^4{xMcXo7cb(m3DgrLD)7W@)A@#VjZT=yx1ZcY&I}lmlLUopO_+gbP z#aO~OchL7Wa`Yztx5z}ZfXCz8c3e1yQd3$W3pF~5~ptvYic$a(S{>eII?H`+G>=!k@IPdJ!>kX3vC`V~N!zp-4q9M)L~7v%+D39r;EvLX?SK z7*?r7j`l?Vrp|U@8s>bnT0-SVdqe<2UWoNVSIf;-J9X{vbOV>HRFa#K?#Q z)3W3?sBRYlq!oSDciZD6K&Y-7ngy4sL z)F=z(bEW;m%U0IdGRK0LnJshe%&zKL6(MvTb$kcl@uhfozh)1+;oGXGASa-iPi(rp zMaIwg#KB3^I8=ZhO_tK%?!J{m?8^isR}xa4_I zQxYtrC6f>O|MNoy0MqhfHQ=zGqd@_LqQ5_^S}if6z@is#DOGfUL-WeuMQ7DFW-GU!}B#r0&1*9@MB`d?7{d z%G?rg6nQrG%u_>ctSTV=2Q)UExuGM!BVTM4dVIR2Rpj(@GxAm~~O!pN`h|OX) zwuD8OI5oTCQVK)dwxomSML8rb!^G#90}}GwFu3+G0=c~pQIeW2g^nWMX!McY+BUrq zkkQQ_ul?vb@5tr1YIzuVT_?qY00}`zO2i620A`HCyi!Du;E=U;UX;aKfwxz(dFU5v zIUZR|SrnuKL<<11m;eIx{XrzZfA%xem2KD3(O7no(xH69Zgl^l?t=;d47ht#WI_(ebQx z^vY?FO%bnFc;}t?>e#gU+_+VcU9mtoX9a;oINp&J(im|7S8|L{UQg)1tY)Y}=hO_a zD7$ck@#i2S+J<2bfyv&8El~C_P09uU5Pe}=?zHTmAIPfZi)idj7F7mL0CXtcFj?LF zC@R#S-!(ZM$w4Era7k#~)^+s9$C?SM?_STfJT88eC}#ekNoJ?rcPq$0yd`i3YaUUt zIWU+@Ia2ti;sJj=y!?b?G~8iN)g@MpMo|gb+&jW-}zyL z2!Godjak70u)+^NIX)?(-)Q#jS_wO%N7{CX;-F%1s=a~29zt$9g*hbuJfi$xYZUlg zL*d!in#82<919Ez^+mdlOD2Z@%sEzF(QL9p|4Y4O`grA%r0qXrzpRjeVs<*D94Au* z`{|@r2KxU(pajbNS=tZ#lX(U@FfuhR5|jd-Lr%U_qF^Mzxkv3PI<#|aijzt@#m795oX?`rP>*UShi2Ktn9V$R zw4+eIT!|SMTH!JtVk*O-MH{_%KmTdKVjh!6{WGV0Ir!{r!t>*=W(W)SK((-KprOC& z(UMjot&m*wGV!c*A94*1KqcIa-LAnga%Z%}1>CvAFp^tf=sk<}L#&TwH5_~WeLy!ufb;JD2adZPj1$QS~ zYZd>sTQFr%4bfh*t#ae!u3QkDjO-t4AMpK*qNFG!({r6L`gdpbGv-!BAt?9$6g74i!EBGI1PPr2B!Gbr@Tc z3pY_^aF_`>e7(@;50y-eb<1cf?nJMhYVXX%C_E(@=dFz3%BC*uQl%=#bAZ!72s3Qx z2KljP2%T~ml}UUT+b-gGaYKn{`iEyjK7BF|0YfYPRxYhq{Q$=P zWpRTO!)+PMRv~_BgTfzJ<$4{nzEa3T5{Yzv&q${y`Cafs*yJ;!^4)TK$Nfd++)SPHm z>hs(>yP>{+fmde_o7mAWiTstOs2uZ3+}$%Atv}aa@k{>1j(?u z!FVnZ&O`e$HuI*QWQ`G+8$z1Am>;yComK5k4;9D~>&qJsuAtD_1}cW>O>I|XI;TPP zfPy4CeLGWe4ZE7}U&`M)ox`?nYm`+7fle}0c23%bJ_@iIM0V>7s>G39J>Mm938_?Jkngqp zjKnQgWOd`8do*jscUO8Mvr-iVn(xQe$YUKdIM z&mpc7qnovN8wP7e`YfAQN8)=*)j=I(J+({XYg<9BspZeg*tU+6LfJgX;)|c79txqS1Ra=K*4uv2KvgO{mMv6 zqA$%%YRAO}F`*&`4)p!vU1G4D+CTvv+%Zz)N(#R54W5vz6x%GK+Idw4I^d;&AhA18 z7H;S5Ogyn~kP_y#z?LASdH`GQZr%UR?-x1_JoiAj;gh#ViQ;3QYuVlsJ<=WEyjKcj zn%f+YwDKT+^-WUyZb*zeTZd_x4}#D7WC8#L+&f1|%iSPh`noR!HVXi|?Zl$7v?a*K zeLDd!D#r`>`ZOyBIm94Bn7a1zhG3y*@N0yVUjO1E8)};SC;|oe{?!SG`l$o;xS5I| zG%0xbA&MRprNnp|;5DeMO|u>)z&59?);u(>f1KyartV+-;khHJiTPBSmOe5~mHr?; z2f^ca7O~WLnAspkNF62KNW%5Mw9V^MZ$K)BlRB+(r~ghRyR~q?S66z_B&xuLP9l5v^)u z8FpFA$j7UL%k+;z5p>5FIIz@slEl8wyx;%*mU^McNt7|qt!CYBm><^Dbijk zwtXOf7_F?f`XlL5{Cv9ZI)cj%K(A~i7Qnu~5EG;nZMGE9{cDNZl!=`ySplGK#L1MZ z)(M-`t2v1AIH7!oH^jy|YN_ihxwp)*QvV<;LN=5Hoav+~*{#zAu6a2_XDg^-X+h`< zL$yM*H2}+ixBvhFQ8~hkg9{UMsG|qxW`z1AXTN=G@xoT%R&?~fyw}+*o-P8jN$-Lu z*b4+)PE1j+L86bABp?K#WcImP{>3C12jbPG0h-DtBn1r>=e*Rf(E|AXc58mZPx;Ps zv>Q%KUx2nt_1|TtI$D&qY5UR=EsW>x>5^D#@~h-5T%W>Jwh=3E0km};*FR(p9Ipqf zEt2t~V0;~nWjRG}!XKjh zypzLe{NoOs^|y`xHt%fDsK&3P+c+xS?H-diuibpL51Lee@F+nf6GcBr7VxxC(3A@D zhRMPK_jYcDrba-8G!U%R5NaX(&{|3*!J%mR5J^OXRqiK_0*Uu*!NtG=dB6~Vy&W=% zGxKP{Yn|s*+nKH5hu6`CFsqnY8t6lS&iCsr9#C!i=(ZdH9(QwLbj9C)o?iE-9N2V9 zDgnW4*Ire?uX;9c&DjJEBwv0Vpu!>2eC}@eU4l&mfh*eHKfpo2_+`BK$XzYW305nm;?XJ$XqFo18kC}CtS z;GIvg&un~Y(bgL=%Tqu<@+vp5ahS79H{q#3$Oiq9{ePQ2h@Kp$qlv8yvjIXI{FRO4TY$Lr zfVQtbVv@LuS3DxqHqaU!c7~_|^S;v{7^3eye$@1jlD-8PI?%(K2zB>s@5?Mc1Iv6Ek#0_!`mEHHe3GE5K zdDkI-6*&|#GXcrIuQ~(O-2!hz$pLr3IGvWu5L?U_EMxFvtlAO{29|DhlRA^|TrHl? zH_S9%^nLXvvoHh(eh{|4Hp#mib<|{H*#^|%4@X&tmuRckf^3@9Kw6AIeys@rm%Sd# z6_}ulkA>pse92{snDfnLq}(V*qW--z?x;#{Prm$dp(Hy2n7rZ>yAl64kO{KgHOW09 zCu~jiqM_M1xS4j2BT$mmcEBJV6+KH7FD8`!Lu9yZ{jWtx7gu9j;OC)Kn8r9XwH6z=8QYsK(%yGjR_s z?EZrA&`i~Gc=F42u7Y>SWh&`(H0_Z+GILAHbj|vx{c&ek{Mj9IzIIDwb%7wXe~e(_ zgStnfs_bCN?ds9X*q_H%i0)@Uuz3jNG-jdiwpl1%!Q>x={UE-f2D+G>j~rt)?%U>L zPlMhV5lsyHs-)4!5R%-Iu~PX= zvjh@o7d}_Yl5Kjr>o7xVuORq&FhYuk*56pz0p{#}734-=*zF?D}EUU@_DeW-@Jtqn18spkXGoNE4*4I+zxhq~FdGy)g7iM~O zM|UjLUiW-^K_e2Oz*n*m#Z7A14!$V;?j*^KzzPo+sGzeux^4}Qb206+cGcg0YLuZz zpkdqwxh5QLwjJ2xE65s0(|||0aP}K`h5Y6o_NIWOOP`dStIw2}qXO5ctUZhh7mp|X~1#Jv{vUdaQ<3kQT)b$LApJf=swuE3p%qzuLte(8EJ=92{Q~(#7 z50@HJoEzK^JhdVYRk zzwoZ`rSW0-8drLbiZ(?HQvFT4Bj=9KwnGu7J|KRl5@bhBPH63{KM}AA0O~3GJ)U~p zoWqYuV+8w>O}K?DY6qKrv^(SkKOn%HawMhOMBPH$?QaygQZZmGmNl5IAi{K#6pqP3 zW;8-B40DG~Vn7eCB79q-SNu=_eZRt~2eMj0hRY+}Zrmxh$_<7&m9@EHebtJ;*PL&k zZoB&sSDSDMs>_od#aw{k?#%q@uDe!>&O~d(83@EW00yL!-P?qs-ftS0y)SK-G#s~t z>qkBKJkUVBb^NWp+Eq)4f%lZgt$a^P>4|OZ0qLOU;^sCVz-7icWzxT`k;tV5r4amp z*1pv_YS}IFhMa)e(eX%J==Gm_Mf+&fzjhi4Ju@}8HE4_B_HRv{)>j5c&22xt424KW zy_y)9J6UjwL(fvm?SCSK6jv}b$3esu415zN_$;NUxMSoJv)^OOnxIiJ*-DI(=7Atx zv?TTrsZMq&(tWED__`B#Tp;-fx87a8ueE2wHmI}-W*PHCu%s|{TgoM|AiIRa0cdcU z>y3zNyg53>rJvF?Qd`TNeiuG%9X9&0l7}6AKu0_3dCy^K(`a5Wlst`?k z1&L6PN}r|iQmzP}9ua)ueoO3yxIZHd1Pz<|*AW_(`9|i_EL&wUag`#Og>W6(|4_%x z5{cKNumVi?^5@!CcVd?qcKrrm1hOIRhS!h$*NWW~%<@)iBKy{9I0;^5kTv&Uo!Iai z9^IV6Mt5Kft6!7e)im8g_T|^D+RR9)0_hpk;2poBtszU!po1}_DR}~ndA>(t8DMdOmsw1M_c|*epeTdVVa@g!;nTB1 zvUb>WOR+~g5Y5MRauf3cGlV1q6iD-(znRh74hvSIqSmb{9Q?+A=8OU0_Yw9Pmomgh zP?w8$ON5`TIwgj>m_Hil9h?DZ+1mZTYR4S{1LaF)qyV)EKd^2I`i{T4uF$Q#Zt3%yWeZJyGU~wLiJDza5nM z+{JYjk5=?9gXkUc1*!p*H-iXT$9LvIm=E`{wHyC>F_?0w68(f}r~VzQDWSG23TNb@?tbjgp~uNi^qOz-`<%S$KMA;Y#f&4sd0wS!PmM~v*2 zX5ARdiym-rrDvQH0Qb+FiW$AMXnln;=Mndc>s!%DI+V;p7B;%f3d=Xxf)KOZ!M7Oy z1|1VaesAYkbz!Sr#}FIdu)W$&SK4%Z;YLfiXw)R-w9nixNmULC-DDaVxLLI zZvK}4#mD>T(3=t^S*29<|MThv6AVpvV4}0WzXqg?O4d6~(G{WZ9GBWf*kQG`XGKU5 zd`i;E@3y+^?lI@ZJx5=0f`k8K6-Xwjt}+U$9!)jZ*I7w1L^0x`j0ROzg;-{9GWMuO z*a|3QvEy)4R6KfBD!o@DRwbI8+Qj!Pqhe$--Xz)jr25l8n3+btm@~SjF!H(Fk8R~f zluFU@VyWXkJYTn~~T2TSAZno?VcUHerD1bKeOH!0w&q}@I&T8)aV zxKILj6%DY}bXZ(hgb0+2pS;n1kC*c{g4Wuq1wG$FF&Ckkjl~UZgI5&WfDGLfcX&T$ z;)qZP{^mic2~?IX(53*YUyCiyg~!Ql6+BDS7v+QFrMH;E1jh0%@4WHVXZZPb>DkR- zo$v~^Ji#X8z`QOEgSWfSyr~%mf6e&yZ~vR|@An@I8aK)0D^Y!&6DJfPo|}(@8;=4A zx#!+lp>1TQt-G9k}{} z!Q6W3To6TX-(>e_ssDodUNl$A1i#!0ES|bO9z18Erdh8_4&C4SO>W*y`~qii$!KWupa5>C9K#y{R#N(h)p$`T5fh)$@$Qw(d{Z-vz}o) z1eXIs+lEBK&kcJ|Fh(zOh==1^)I#3m&Si7c(AcP(bdsmag|4|&jAE(cUt#XlvzQ~@ zV89_O>n8Wr7*oji2jYNlIvS;Fcb5+~#=mM3rv*WLoR+!ns0AZj^IcywqaqTQN4vDw zEM)iDzJc6}tlj>DOs2$7*95=`?DDgY*FjqUjPsmo%9Tfa#cFV|TcBjOvMQJRA-Yv9^x6aLN`A)SAB{kWT z<`6y;907j&&5{^bn8vUGTxU?ja^NI|?=NooF4EOQJ_n^j<~HIbDF*0bd4l{VRe4H1 z$`3=Rh$x6EtiQP6%PWF4E?QEE4|RlErQyG_9vVv?HNZHwjyjiC+sp_OL5zpu{0J_! z=3;Hu1c}O>_gjjrIi=O_ptZTf3#^peKLEoW7iRdkZyG5W`%CBDPA* z-=>tteGvI5xbYSP|02&$BkH@|w9PhMQ?FkSKMTlA*zurY zXXwqKlGun!tAd~a_;u(k8vqg8Mzj~0COuN~Uw^gFA&R3*T7+O;|D$X3kY%Z4;75F6 z{Py=qw~0F%`#hdP+F@%*0!225c3IT4O2ROA(05|;3%(h0&aD<4|0*Gy+n9CVm+e~3 z`vepF6dIdlf6w)$zWi5V8Uu$u)5&joB+T5{i{uEgz=9hhLa{wijMYj@ejdPk0=RZo z+P1Cu4Oxt%4j41G>PAnYiq@X0AMVq%Yyu?R*+HkbFGHXtH_)6KiQVK*JLIzhNt^rg zAetYHGkId?Hb&LYynk0OzJ*Su!k7VYx4V5)Cvl#=F--$#bI*4t`IUp42J1IF7Fsp{ zs7O6%(Lj+-+TLmbZd~yc=J{hQL;uoAMm4(h)+A{Q-IAkD@=F0N71HWw??(jiw+s4t zSJv3sPiDT<*QSj#AkKZ==80=BR0}sF5b7B_@4u}#{nJs^!;yu>pE|>%5~!!0uecON z^7MVhZS@2f9C=IulQ)t;#Kfe1W*BxRgP4%iD4CfD^ugSPI@^@2M}1rd&D%j0tQ~HL z{KllUD~7Jqo-k4^%tDPXV-L2>^9$^hC*7le zTj_-U$M?am2MkW1h(M^2KYE`>0UZ})K4^Y%DT#lwbSJkaL-OI<@gwPmCubldhP4IpR|IPK?Hvtd=J|upyPDp5&R3=e z$v3IxiTeQ0zX%H?LQGl8yPDZ_)M)j=Vz?=`Y=rJ9idpeTh^q3^M-3s8cDwcA0SC&a z7wF>c7C_Blwl~G%ajTbe)o)s#g$?5bi$pCc_^e6BP_d{vt?vVLjBTJJ@#B`iK(?gM ziQAXBRpL|7hq|7kKFjT_yP6= zo(O(Mp^h(#k9C9dQ_H_2@^n)@4&QK7;tJ7SiFLRBb^o%q(NEBfc2jHR;TQUo0EWg= zN#L1oeCH%sl$R7d#vi;ww z8&*ZgTZlrw@k+-jPiGs3Z)u;ndo8Mp&4V1Y;Ye5U_b(f+WzVx&KfSQkSTx^@(nl+$ zj)3A4Ll{pp@BLZQg*IHCn-M8CP1nB#RI2IMDbUNlN?JgGcsaA=Ut_#wR?SWslv!NE zy~w?J0G6%!rAh-e(&V$JT5so?o=q6x$OwT9y{{E}NeUtKE8DmMZX-kT{g1y;beU8$ z7Tr`$#S^$*--HXcM`xy)pXflWT7}Z&Vv()f#zWCp7NEi)G_d=tN8lDaV`%G?QsR~1j*ZSy&66g2glf2y^%QCBTN-{`o5siQm}AU=jAZl>EWwW&6cYrWY4+oIyA30xL-2$pvA$f-XVQ+k^yjj#TT zAHu}Q-%Qlu5nHfllr;!OhDThr~! z(&D3Ny%2Quwf(T= z?v2)zOr)v`QfF}j5=i{gPk{R(ls}zJaT-MoJY+Z4eL5;YhvJ%emdgJEmp#5k%%h2m zYV$=UOcswxFnS7P8z(HGpHW>M7)ofUc7MlW?SK&3viJZM+7E>6!0~MICbh-$ZU6#; zx5{u0Z9kW9ib%jkbcirJgmUr>73Ee&k2tqcnEqG7(O+NukOCA4I|M;w5U~Y68Nn4_#BmLd=J)EoDo5 zvUeVLR;ZUR-QqxG`GIUxc*cyK-23I|^f98cWZv<6vaaqXG1ATR9rOG{)pKQYE>Vtrc3Z^+*ML!CM5%7nijGc`K`+h z^=$#j<*U{y`EB9dFmWaA7+^)pc$F9}8MOd$>RuBC>Ba6cqoVK^4=J!&h!Eq#@Y-@G z2|;MwuPe3ymPZRl6zOIQ--p8p!!7r)-VAUZG9Vq@dgL9AtrGJlp!P zc7P_U%_5E-*`m7skJCD$MShRy^bVgIyEK&f^JiNv%8OI*iX+5xfeHQNiq4aVukzz-(f@Gn9$AROm5qv(ftf`j>wmt*V>;mXnS@AQ*^vr+!{}<}**j(ls-D#QkCpK`Z57v|Wxs?OdXNV^ ze4{>Z?wyvR*C^^=;Z?%oi(L^{=8cUZ688M(J-;wP$<$yMSt~p|t z+2;ft@|fS!@&;WMee<7x?kJZ1N-k7L)U$mQpeg*d&wC?N60^=d=Lm_;G$2IdU1o9z-egSPGMb8pa zto^RzC6ZWVVs}4&ogLBhd6pyCQ1jX(|L^Fy>4HkQV{Nx8$JV$W?%bTA|Ap=>Qs#-# zwb9tR^bzGYsg(IMj!yd{_nQ-;@*o8xj-4?~bf5E&9^=XLjosp0vZ(0-h>7_n;6iqm z)vceJMp&!%0w^{zR3ESR^?0*B8ij%x8)lx=0X=Xf(_!Vy`rT_^%d0_4?mG<1Wq(U* zriF(pTqXsrG?6bG#dKOxIJm9dFQZvU?uNh_FQ+Q_ur$}+?r|nx$ylAj?36t^v3lvo zSylUwMZf>}oSHPKEfbEey<|5`G^SsLL#`50|=sEuXbyo#r0qZ+R7tlP~*U z`lxJ-R|6MC3xzrlP6|5NhQM9Y_B(#WW!|SAR?XEMAoJ6=Uv&4OG6!p*GCTzhv90TV z*;v`kr`?dGPNhY?PcnFY<~C4{gX?~AG`Bg{Y33-S#HVXcbOO?zd)1g7JV)<*rjDs_ zz^9t2`1hE!I!l%2R;NufoM4hu1pY~zM8ofstqt;2S2c(wA%rz7S{`<=qznLBC=f6qDp) z&tM%UA$i7=EWIxYzT`UUv<}|Uu?FMOH%mX_lo_p)Cn|~eA##GHZi7Nz8*wo zY_>aAQKzg0o@6k*)Jd6utMIagcd^VJju=FH3>oOflrIwZ{bVj|28+S{5kC&9comBj zrfY0bVzi;<<|?t#!eS`zz@Zf{7=E$$?}#1(V5SfLKV-LE5G?29ZhH^CR411%rvF#? zX$edZSfL|9+?6k*>$LX23~C@>P1H>$T1+c z;5{#EtV%nK%+-FBXlzj5LD9wAPTNGvo}z?(GNz=w<(@{?-_ZwC!nw{50Q@L3y;EPK|Qca~E$hrF!M{qMN!(u^k-wf@bHKU?4x5b9HpGI}1zKRJ= zHU`SxY38kuRA~$!y>*s|ZVv*Jw8v%^J__3qQil`{hQ^5PiD?2uU>Ih)hvV9{k+B*+ z*a6zJI8>CvYaSS)HGc(k$J%C=9@--;B(7E`0+Tk^sjN72w<0D?Lv&k<*D5eo>!sLx z$Bn}1y782qz2wBfOX0NgYz1$)YsYo^$11PVBMdqV29ZRnuB#!0rC5Nuv(5fp?M|a` zza6U~cUSrHaC-(LVozd9^9Pc5HZym`w}LBbGgOn1C^*8jKlP1MD7ta@m$l+02zWdr zXyaDNr@1#mybB(~vlXjSupsYeBrnjKFf;1JaMZ7~E2Me2B@G)?O)39Y+igsWYCMiz zhAgU*=`NejzV@{Su478fy?Blzg7WmF{ujxPquN#GWtS}rGh&z1|GSs;TY>G^=jMOD z)&-zLaq`%kfPC7Z0A^1Ldh+^8t6iPeob{!F{9)~j=dJ0yT8-DA{xjd<=DiYVw~s;1 zi}%U=g;hLo79@gBRrK3i{jYBGy%M!tJ8Y;q@h6_|7X7!y-iI7sq*g-In_hS2ua zAr&H5n~G1$0;x%UQ#}QwWov3X&G(wZ;X?Rg4>sEgb`}7V{nI9zDx!X5xbkQX(_K0| z)2p95smcrNmrlqRqW`lr!>{snEYumQADVGRF|-ffIwjFSe`ySHit%y`&n=%T6RR zwOqo`6^3Xs3eBZLQi8z3hxX#xdN|q$_5Bdy+YR!d8d1)-auk`)k_BNv;!F&_`GEh0 z#mHp>xa|ti;$&9DHy)<;l+|rWI)fv6XzWo8LEq<0$O&s5>bPLI3O!7#z~h`UDL6Vt zjuVagRUV~RpR<2p|74t-53AS9sXFD}`~ic4bT_>6k{x%R%B6}T2Mkk9w(Y>yY7d62 z#84*(h+&LJ62N``ZI%Yz`RGrCqAqvWhh|IREuXes6=q==#Xx=TZ2NB>|3%xT_2tyg zCo1bvAdGx$1ncOYC`6~>_oo6Uxdrz5dS9wZO;1CzLhMx#D-%t#3H{cq_O3G7o)Nu11G2~mb zfJ==MDQ13*ymYOm(u*i{r(FrcZlnw97kb~??(_zxQ)!brz&9Oc2}vsxHON$gP+pHz zkY5uy(K=PN#OjMS=15{=lS5Z7ShCS1pkQw$0TCT3gcqseO=$9h(JBuVf}bW=-f?s@ zAg5Ajo;rKUep@_(60yBHlQ`qmMYNg<>gPdlpcdpgY$sI++ntQ{DKgN>E#q$of7=KU zinlJJBx7})g%`DM2$J2B(m@s;?{M<-l@VP$BCGhCSw8Ws$&jc_>%{9~_Y zP}`U06WRS8pIEX#&1bH?;5H&eX5Q+~u;5{&_6RzXLT69AG{T*tdSSrg*ThM6j296JW3l3MW^*jlr!2-H%oi)khM+~&X-jFp{mHHQ^O!CCd0W@zu1F;^C=h?@Y-}|T?+V>_PpGQ=OP#q1A!h> z(m5X*h+1Nm+PEnYPxUL>4HPZ~a3Wh*Iws=olQ3LhFH&Y$uf;KRgZs;9AgTzQm3(A| zb&SGRU-J>z&(B%W(p~D{m!ugB!#%zRy7mJ)5VXUCMy}4+)h%TRq$e7J;m-?(i&BZ| znoc;+9?Txa!w$|JS`B5zTO^Q?H2Ftr$I>}Yvi*~qI{Vd1P`8MnsjruTZSr6`j_w2J HUFZM++-%zM literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_b90c24b136494fce.webp b/public/images/project/project-3_hu_b90c24b136494fce.webp new file mode 100644 index 0000000000000000000000000000000000000000..edfce8229ef558e45812ac84498e18596fdbc339 GIT binary patch literal 8214 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 YSVRCymAy~t(ep9y%ss&KF-iac0EnGgR{#J2 literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_e67ec575b7f17bcf.webp b/public/images/project/project-3_hu_e67ec575b7f17bcf.webp new file mode 100644 index 0000000000000000000000000000000000000000..e7148f7876bd5e27a6739948fde3aa8fd40d5b2b GIT binary patch literal 53098 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 O`S8^w3LKf}NB{t~ntRUx literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-9_hu_18953a22f9755bfc.webp b/public/images/blog/blog-9_hu_18953a22f9755bfc.webp new file mode 100644 index 0000000000000000000000000000000000000000..a8af6e41701c55dfcfe45b37e9b0da5c0edc37d7 GIT binary patch literal 41646 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 Mr1K3msk8zA*`=`ilmGw# literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-9_hu_26100c6d555ed19e.webp b/public/images/blog/blog-9_hu_26100c6d555ed19e.webp new file mode 100644 index 0000000000000000000000000000000000000000..c84cc8799ecdfadc8b76e72bdca5350286e1c0b1 GIT binary patch literal 37692 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 literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-9_hu_37b697b4c00fe908.webp b/public/images/blog/blog-9_hu_37b697b4c00fe908.webp new file mode 100644 index 0000000000000000000000000000000000000000..da02d57985d7dd0198b37ace940e51746f2aaed5 GIT binary patch literal 33428 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≺k!xVYSYA$D! zs@n`7p%Bg{SG##yk4etFaz=C(U@3}b_%`}K{)#uElqk_OtE*A%$MK0G?edazDs;RD zI0>jc7;UaeeGhkuTp>3&%p7Xo+flm8$6-j0Vvg>JGX90z-4mYP;A0&>+5xUN8UOH- zdKSkPbG$yWU!)I#R^-YUp1@^38g@;=IP;&?g{5=E^X!EAyDxlSs$>qZ%97R2t0D)Y zMpqU{j5Xm5-5|a}5hF1QO64vQ-GOBBJR`h4a4fDS>23^37!ayXQhj->5{C*D_HkhDT_< z#(ERI?T>w-l+uf|hZpxYUAvIbl{;sm1zwV_X=g$v#rZz9K~W$!_sZK7n#pYu?O@&s z>TKN5Y~TZ0T%3fGIhM5$iZfq9w5j&_52|_m7CgK`eJXD^E0^%fETj-|(5O)0cce_o zyw<^EafOOFBIOmeA|Dpe=RVEORV1ukVHb3Z$fx0dFnKs38JcGEpU~J(Qw`pFsXKd5 z3U5*v7k>EozkM?@z8>R#40<(cji5z(h)YLrRwz4}qN>(iKeU>vhS^ra%@8#Z&|*oYAISHn8@M3DDde%~x_ZiA4_02<#j zeUUZJ$^GOfp%HIxV;ye9t2&PQMN>b7xywhQ{@oweTYAER3td@DWRK{WM19qK5Cdqs zJCL6N<|jM_$S$zFLN5B2X#p3m?15CKi=oLL&H8tJh&8_;Gzb(P7Sw2_DUB!e+iz@z zYIMA&RfIGENk1d2Fm&Nlcdd^H8r2qs=|UNy8DWa7sE~j81Et1c zz5yGDE5%Uq;&a044-8QR5h%=75nRj6yHl|n`B6c6Wn2ufdib#WOepUEW#m4uG_cIB z4s0MgmM%ECeU_{S@_yZerG1yN%c^9EOpv`(TKDd<5@!=Que5=8P@2f{c4`O%Qu z_)k&YrO7#hCo`Y%dOov4TAXI#x<{eRgI+ke1$`&VMj&rNdo#m}_nJA}cdc&4MBR0S zF>7z$`C}7P*TwPz$qr&KDBxNQ32|By1|h%S;;pa^oVzXgE_l7w1CB<~0m7KiPdc%o zWEu;t11%=d&kcR95daB3CvTb9f(rtxUepb}EfzIF_H$mqO%&GFL{{b8L`j(D!fl>B z&fJrH{~&^#M9__Zc!$WAH~WdHA)1a;MT-tQ{w&wVZG0!Ggde5$3&D<6o&BmXO2UFz z!Q6^w69&MwxpD&*`;2pZ9S26l1t4s#`AFZlaRAmZ@3VPzf4jWb7y4}X`5a5aN(-z0*Lo(45wXO|z+cL$Hlv*#*NnLz zFEDGUz>o=ty!jR0%TR8sy0W(`FyviURseEOnU+R_{%{Ix+;vbUxR~}^=T6FopWBaW z0GZivVHK+J-PkYj)9B^FUHA6y5We)#@tyCx6)P{=tu&dLzny}Zo@V| zndG>@C&bL{-sRJP^in=q|dEitlvlx~u2FF`lN&A;U!A3L_ z(UVH+*&vxTg9VCdg{>&BW0Di#&3m40?i(IV130;@Db@PUo1xL2CssvFcBQC+N1_Gt zlb(_Q>dnOy8l}U(X^~Iq3f4%r5WDN8i3?x=UH{D^_Cbnk35^;lye=m<29DvuogL`c z=jZg=?WHV{$ZXpsIdMLf8n-o;6dbYfrVp}Cy($Y1;B};KPatOn3p1UTO-oduH~`~o zC7`(u5}|b#*nd1EY+1UHu0#Lsm^gA}(^Rmu=k2OEwO5N(=%7O>uPLZu=>f;3$F=kQ~ryZ<;MOstQFd zi-;7Clb*^ZLSvXCGBXfA6AL`u+a^op>zMjD@PGme+grZ0x#6&PTf2V=(ECH|*ex~c zLOEIhxDaM!$g9+*jHegue||ag25&qSoFVrURD>e>mFW2K(%37-ScOKmxR$Qli5g&? z;^o$#)&So6qTBQaR-i=Jl!Cj}huk?SqQYMXFb=S>`xU}t+E7LeJB=K!TRU8!?K zWy{w^8x}jFvCvl2z;OT9p@e2d?!|N96@h~-3XtRoR0PkkR$NA?^{uxC$(&|ekanANv(i+taLewclS8f9N5-}+*vAj)-IQ!m%U8_kV?w8a+ z@bhwgWAsniAGJ0`W-{2F$kcdP;ft`O+o)T=T{7so?Ut#zXN`X{PHC<}ScIyJ_W+;F z_37zH^uveHS6wa8=UgH14i4`1DSQ8=p3{NA`wLNF&G;JoN!K*X|P zh)*;Cjqr$_@As}nBOpJ=+}vmSC%az?Cr#-0<89^RbqeSc*v z1#}4At}=Jy!JmLqFwx$8vy#5A=H84bLl~@`>3y!7PY`i;IZF{HKXD4D zh~IB{@0k-cLSv6T%x;^#3m~=ZXS7>ikuBI?Rw|4v_VJfhU~pqI>F_VX?8+I2u^_8?9- zZ;<`yVhnB{MXg-$Iqhd*prv;2xTMC2tTLAo&wn-hbk1zh2O(fSkJ=I#6U3ILc0gdt zwxNzo*K!e1>9ceO|Jbisbe#_P>v2()tvmy|AR zbyHsDRUF&;iC&kH0r*6pXIgYc_pb5V!et=i#uMiegMZ$oM+uCqb3@u?e*;?gP8V^{ zEp>=gOE>f$Aq6+#wqO~;hK587p`3l6KtH0@b<;Lq>~t@P+`JAy>4#I z%cvfEr}WRp`rAs1mTpr};AlPId!`6yLU!)$QO;tpx7-7rM#+*@VjCZiBSXpskh7>+ zk{R9GSCUd1HOf5qI-7^KAEpM`>FdD3f@^#mH5%37N0SL7%XzbqMOn>VZ%FOLhF?4WBW0H46 zt*qRTnJKvkAs$~Ta_D1qj^klMxvC6i=@b!WgTCVzIQwBreHET@4x zob=-s6unBTFl5{L_SKaO38^a8XG|Pf2-Xi~>LH$BoM=uMWN$30@Vc>_=In`_Q@^9K zPy9unk>zhRA1`O!>y1ibTv*}R*YB3xdt|6cnS9mW%aw!33vR#j&(LLaf4Q@Ph5iN4 z@^i6av}ri>4thtDiBJ{!SUzqLHRk1xRxU{k8n_l_8o{7A^D+A($8>hIF3F;D`l!Hh z;+L-AYeDa)SXzungB~3KUD*vR#Jyg|Vkq}ph*;dV3MlBsw#M+w27nGRKwv~4TF%rl z-4p)f!)J0N9)yTKg6kmFf0+z)LiADWdK~bkQw-Sqm?6O2X>%1G{?f&0(OV)Kn9a*q z5^Q5FE^Dzx46Q_gi&~CoupP-~@}C}<*{KGL+W^s4lJrEfvf+x;3eqy99yUXh-AR&5 z)(TPsKY%RpLVpuJ)!QJ#0-Y?hZxU!#{W8*PS7~`z7mv_CQM*HRio%3VN^;(D`X{3*&gW*47G~1aFn2!>zzO$mq}dCh zA+wmr{mxc>SOe{FaCw)sQ9~fI5oEEu9$65z7l!&Y0%Bg|1Iw(xsTw7P=wyf9;;^~D zh4>G*J6TPdk~v!g>4zWSwLTMLtn|zs6{RfoU#_0uYH<1UGt0t0hOmEaeO=AF=xWfF zQJKSd#D4$%?-3gsuQr{QD5f4;4?-$_Ak^K4)uit=mu0YwB)Q&RY{>~%E$HKabqcjn zZ-6?NWZAY+C~-I-BG*93B^h|I>`IzZJL#Hr9`YSE!_GksAwV@3*B_!K`*e>6zj9_j z)u#va6ysD$js4w*(+Y$tKa>Ln(^z7LImq0e+xg;Tj&mZpKkdA7SB^cT6erv>+5V#g zxw=tST_xmg8VVcMucFe@9_UaDtdH1T>BgaZ@qmGw4YTOccHyfz$j!}8^o49C>0!Qh zbnz)!{KgI`laRpyntYUHUDzu0)GqRwGaC9NlNGZC3x5u*lCJ}CX8vnE1S}86Y|vJJ z>A0q7(^nIp7O!^B$Q1-WcG?eG_A<&GE{Y>BZ;(>f(-{x<<3?#&1KFw5rObs!R2K08 zJWC5j-#!3z`bBr&9_{kemZMKNlSg^7%Rqz$z1TER#rY-{Ag@a&g204+)evyfu}}Fn zhgbRC)Cldp;1lc2G1VdqS;tS91{qU&gf)A7h<6H#7o4+c*y>6!f(lV&22Nq=33%Da z!kE>naogH!`nDy$DdJ?39Z|0U^1%*V_0%#{A2=2+l<&-&w1B^g08U^d<)0*Mbln{< z;=)e)b=#HQ!f2$Wt}G0$W_SWd`B|TP5lQ%3ewFhIaAVuQakP{^5?W-3H|w}xy4@E3 z1;643N&o?)qfVHh3ZUG+()iZWa(lEzV)E>cpn zU!G!W+lu2GKan;t41dq(i1DZX?}YPUAy4v6sSikS)!u;P(_6*nE<(SqO|VC54nOq- zO5cusJCf*$4$iz!4gq1VCzRQX+Q4;iv#pOt50mTN9h*RuJ`LqYPB)@LaXv<2$0J3> z2d~@IO&q$p=N`i+lzl4E>% zcjkbWk~))2^2n1a$Ejb}Orrv-oU*!JwC!J?Gxd$vcR@I0#_NLs zw@$4SupFJH;|Q#Ms#`gXS>KtT@n*ais{KUuG4Ajo9e+~}{8NJ{Q$aMaFVh!bC*=uY zi78tNyFEl)2y%oabxVj%V%Ji>R}48oGhDyaw*SRpU?&qIGzl+4**d ztL3vO)k0Cx1F)}GnO9}zW(Lg&=Cu9~^1Q!}5~Wc~PA$;(AAnVP+7x^$9&;adW*_Y{ zsuwy$>Zy3ID|Nk6`j|34;-#qN<>4*2BN#+-RGHS_(6P00a7xet)N1Ece0>6^%YdXh zu1^!|A~%Iq8-0iZ-M*z_ufCSea9z7@An)xs66#$|%x!pH;3YQX>n5C_HJ?>bK3wNG zDR-)C83?@#zKizFa*Y|eJ}k%_xK(j4urJ3+6KXI>AZc?ev*fmLcO-*~6q^6|YsI9; zduug5m&qF{z>JT9GotebJHg5K^kM}hBSpk9ej%FnmOu_W_76hKiq4%1p7qAW8g|>sv|O6L=#QjS zG(-+W=rnceX{_}5NRnryo;=)(1)j!Rky_x>)ke72oE}+l=#><4gRsPoJIg7Ia~!~D z%s0oi%beKpJm{xi2r9!N!P30ha7kR1wwT^sQ5dF8g=|~sgKuOy$N(F$oTu!S2R}bg zqi>!zjLBGp(a1XKFEB|@dF^!Y#~1SnFO8nnpC*b zf-;x`E~m8dPWQ!a98EB7X06PTw_^z$xFegmDYtv*aXYlbzzS{KlC{`}p%=+wKldWB zRr!X`sQ{4VRA_N?qWgk-6@$Y3Nl9#2+5XN~toZ4INgD zz)ujN+WR7dBq8xSo%WtSQ!zip?K7t7H2iDwV8X2)%jRy`_;NE1CM{X=QW_$LbUaNZ zFm8PchlvEi1&?dd3*o*7m=^J3QWu=^XhaG@jw_sJ9mLQj_h{%ck-DBfbQ5(3rz+4gKL5@f{q!tZb8yzLuxV9CApvsT*vX?8GI-l1DzZ zYo~{7M+T9h=WuQr(1E&slg&sjWbN#rbD2oh`2bu&4j!=0-rOata|0u-_|PepFCd)* z0+)@@`I61!o1+}d^nT@6BC8}CBimP#-dj)J&>8&i=yA=mVzf>!f_{^ET!6WIM{(Tz z`TRFz{~E0L0)Vp->nvwYErh7dH5R&0E#!v?g&d;N#i(;F7}jBQPd!YkKyx?7 zig!+JHW4BIGbC%-Zjo7{L>LKa>yA|6kEdF0H{d6nLb>y|bG`<1?}Y;5tWNDKy{tRNu{~{8m%J_Bn!q z+J-*1%*>W1e<6PUP>>XPYeAuS%rFSMlee4i#F@x{pT^>GLH3w6izBKjj_*JVP@{CG zkuJIIrsU1&z}htYpMCY`rF#*Q$`VQ-##z6|JozO-m#hV~A{GzhaHYpUi7A%QNwQ~T0Dl*e*Fk+FewGK@ z7c3GDR=~$OaIBeI5C}LADUC~;p$q^CM21WL3Zoi5oY1AG{L-5R_zQLn!)vHBWC~qpS2B|3eDHw#RmG%cGu%sI#1+m5 zR#Ry1_`~5mWxH?WdGm0vNjY{Z*PKtXIMVa#8}z_*+EYoT=uq9lhiJfNKoU9=2K=7O0U?Fu??h{jaPSCz)L4&B~g+= zpidi;mtq5d*&h!sa|;_Ma7&2xP>`g;afHG4;9U^1nXbaxZ+{#bZkHhY8os!}h_+(@ zH8pIA@|G1g2BQps;bgnEywmrWfA|_l6|WV3hOiM z8pgacs1ju3rAeY5`C@FnOh}>TufkYYq$v_01x*ur@g%+UD%N zVMTbgB1`?WYC&^HqsKik7)xA}uonC`U)Dd!!2{E4H$g_zXT-$7;+G|hHmX+4hk(TR_CP% zDZu7>2mOW131Lgyf*iSp{ZOn%Utom1m=P2smHbw4;{H-P1d(JBXZLU#5_p$7m>mDf zuvhR-kS#neYvfeJP`nZ)rOkbL+r6m|&05GgX-;Ovv^cX(X1zajRj3?>I=v#s(2efY z+7uFB@)M64IY1giQAW?Q5n3} zezuVDEzjbPF4k%g9aYV~1D$T4KH%zLPPX)!YR?esSk_xyzQLrhiC4)&OoANdEdt73 z;72V*2t@^WF5N?ms1;4YmO_`o4XO*xCn{x=u=`hLb(7|8?7|uxTgLme_d`WV{Y`uq znMaAT?7z!af?%BvV;r={b2Vix8zsN0AbDeR6aq$0sKje%Cv)FYXF)%K-tt{iY%4^R(BMcRumzroZW z=E7TWUT$xssqd$+-x*Qf)GkY9nfnVz+0%^n?hWTMfPPn|Z!iGk6o8>nU(j-Aa!)aW z^+5$jc+Sfa8Hu;^Tcy@!hr|IoWuq|bCo*}O_h9c_&TtF*z zz^IR+vL;X@xb)|CKg?izYsuslJ}gTz{R;jH6ZuNk^-wceQbs8$*iL2goYR7PHeywC zqfE5y0wv?A(D3WC=dmt_+cipYNKo@6p%kP#eiQ7<=p=VXg4gwy-A!>!-bO^IB(30E+yaGmr(3wmGXyluL-qWpc2{>Ig=`BubmrM|lbdqycIGz~_?bv0NF*qhdqA^kS2NI*Ol`pgDU#8u>l=d3nO5Z6G{hLUoLa zfvZLB)QP)B8RT%gK>SNImY=_R!8xQyOAC3}*W-bHnOVZarMQBm8h@vM8eD>bf$Bhe zu5w@40X#7Uhu+E*x89MHgEF`^x5B$*KFUELZR@kEEKsTD|9x6|PMPZ>6KWm|Y!^NI7k=xgU*WD+I!6u|1r%tS8{Y$l0&YY(Dk=vE zm5E-BsxykM%O2%^Cm(D*X_NIZXCSt?0i6zhfaO5O8D@geyxHBM?a+&fw);|$tlLyP z%f71WZ%%G=AVQq3VyhK0O>*a5@1SF9`~NIY!j#;cuSO_4nXddMe-UzSL%8-=C}tO% zRY}IM-Ym7Dy$}l2(NFNcviW`DlSJ-qw)qhIoiv82^3-LGq#IG{?d;a|Bq*I+0m@gW zd2mY$f#v6)y~?jg38qaf@}0wb}~F#Mbz5JBF2 z+;TqOrNxCOvywxbs{tbdVD!ph1jU=0`7xHkaXHY@Bg$Sc zn-QFyhorcE1|)2tv7R^tx+>7vDXBYsaK9T|khW1OPYkx1og*(u)&tzc*4D(;G$Hcc z+nJ-`S$9x4AX!u5l#-<#elarD$QK9e?UYB8n38%yfUz{e{t>BYUdyi1_~*h2fgUwc z<#g@8rA{P+j73v>29P+0&4qC#M(8Ji^H$!qU;MRP1c`> zt&h?WrpWqA+~?4uZ#$P?*gsQXn@{W95{MXZ4xv=G#jG?jg67l4+Ug%d9!wMaKV`(? z2`dyqO7(nlaR=xyjMs;!AQ&ZWZn_#8*7o%zuX7rYuGPfK{4aW%7h-4X*2Z{K<>0N{ z6&ReRW^B}v6%$lay7kIYp8V#5=BbUp9}8g=+5gp_uuNauG&r5D1HY}O>fMH~D3X2m z$MR->wu{u-$KIg>L_&(Fdi`MPI6#h#9$g&vM+z->K*1IE{?GYepn^+PIA<2ur+Mcq z`>Se(RfH-!Lm%Ycs4Cgiy_u_vFs2MydHHY6Tkl`v71Y0EkXXy(KNMVQZLCJHx-+DP z1F^G0k_}z(uk{f7-|*aQvR^k_fFA>!ba!Nwu%kZTzmQqg8-g237HUwzKQv z57SU*Qk_=td2&|s75!;&K_nk-o9D52Wza9*3y3deB8Gb(;jR`;=4S9^o|x?2;t2dj zANW>R%t%TT!RisZE1>g6Q~F%AgS!TT4C{P^#m1v9z6_e`=wf6o#-S-+l^jO4aUH~I z>kNYpDs#%2i5G;E$GNo^$p7~-k)kwZ>~k#A{C%ScT@fm6=4Onye=Sv~Jcle2>(jNy zuVN{62oxRL-)`c4xDANaqDws_mee&H+ROxoGj6~FkZX{_OGy!?){B~7tpT&~Yyx4i z$^l1hTZ1Z5eqonp)q!l;#?in9U7rX~3?wd+A5{$Z&xEuA(~Viy{qB;?a!eS(i|xy< z^@fkC#A&v*Q`uAswDj#*Fvs0hms{i>>JAH7B3C4KBV2DH!pmLrZj3)9;_0gcXPLp7 z#8}U68REc%=JHp3t>j18Sm?iM++FtmKg%5p%X`N-L{8K^yEM21eWYxTIYJhVY8>f= z%C5*ZGEfB`>SZsU{K>A6MS`^H;-1A|6YLork7?rR||rcy+-3ovQ+i96GvhO#8c1 z|2vAq@oGeU!@<>l=Fp3i6QE?zMl7?b%T6@XxB_L$w-tpbZH{HA`tyh21iAZ<>-QU$Sj6EZT@_k;;@R?V2Pmu6mz@pd2>!f4%W`4((lUX5|4g3 zd`P7#m7l}VX_5m*6iGpMtY3tdBIj0D^3b>Dj-Qac~i=LC2m+uzkuE8X+2^S)vaT_b>qzp$IKqa3g9 zzx9e?LaDvP8ld=PsZBnAocukxs}V(z3*q#ALR;uz-iwFT(p!HawzT-^^?Ed0*HVqH z7^lMCl=45ocW8h^^ z5Rv6zww*YgkU-V9w3vN#qg@?(>^=aHQX)Ps27-E@Ir^A;+a$;SDB{4hy~A1!PH_o7 za+jy*1t(&k6qo6B@?Zh=`$<|&eOvOJ9QxNLol+dNOE2_ZWiC1^Ozw|xC$!4Y1A=T7 zRgES#o#L3EP-KDZ$Sv=>L@IESZ^JHno=E=&^RHyBHjn7(HQN0*`s`(P?fm8I!S#fK zSg{tGYP^Ralt-E}~G?%_=T z9?8fUNPcEJHtc++u(r0g#xg6Xv)}j^hMmv7Ou!#a;|c#J^hkTiF;oZ-NW*{j@nJU` z?P07?0EagthWPaQEBNEQrmyn6k1OFOc^44`Z9dwJhoKeOyn4^Pb(=55UH=id$OslO zSnayN8Q-${0$pq?1FB)l)o$S%nDLy+cQlKTcu4)wF0NgAvG2(Fn$1EcByNLPQCWP? zzp%w!U^DZP+hmBU5V$qZ<U=ri)&|H9?ZeiR*9Jk4GU@v317XH1bkP}$RXSVX-NZ)52qYT zvN{&iy@;y{-m5xH7fj3|7w7+^Z>pnB4e$i@sHJyYd^=Pj1?k1^m0s$%6O11}ktC=d zDpUJKTQd%hs6-wY=Aq?gQUx@+3?r`%8EE3Rh-53*^`Oj8w626C{k^#Ac;u2@r_d2YQhZn};QJ6XMA?H*Ra)vf{);96&@Q zk|5i1;03`JjBQ_&CFe3zD1J%a1m@~&=oWEkJI=% zP7-Z)r?dX;x1o*~r6t(cW3Bp-ZOvsTspLUw$#mi_39yJ{F5f5`-X{}u&9}6-=?@Bf z@Q*H9OEk^fi3_1R;lh%Ng~dOrl+V>va10FA|S!#Sf*+RJtQD7 z?E*NowUSlPrfAT+e0BdETbYFq^Nh=yECiHmhJv78h;I=UC2RJ7MzhAi*&AAUGd2`YS1i2Q6P#j2JBis8rd#=g@`9pehir z`q{#oR?j~=^D@^??;f$VtG6$U6GW%VZAoj2_}!mkw{-=Lu~ft!+j`!ly*cGa&)7An z3k7Cx;#c1&EE8+R_40)2B^hs{xS;bwH_6(~0RR{$ab7z~v}~Iv`1KjN(;9iUsn0^o zsn=gwu0bK4`Gp9QB9w`cq3x}liDw4X-Q*H-Guz7k997&!te7$Hp`YVc>X}es>Omn} z{Q(pfnt@-iX#Q|$^eJl~$ebQDJ0s8blYZMydcYZ7QvJNm@`>Sv7H;oa?WTfzq^Bu;T%Y7)G}n3{JyH?@wl&%6LD+O ztb*WERBm-a^}QJi&I>nTR$=YEsDk*@1)B1Zec^-5gtYf^&Ex0$jpPS9m=IXvm|A4u zg!51Hp`|n7C8v}erGVF$5r7+*LlP~6Y}>_{DZgU&-stm!(*EYc*#s)9G%h`@a-IUH zUMHV*x6}^eZod0uJqjUOy&fBJ?LM<17-m7~AC_Ayk&dzt3#%nOtq&nt7YUGFA1)5z zaj+?j)Oi7D1w%PEnSHvtr74i~3-gP<6`|B_yzq)v*CiBn(_TD6))zD5WE5tR70BzA zlx^rZm#T`%4$MB3)2}n70Klz0VUp3^295HiZ(}jvU&A0uT1bdKZKnJbYeNIAwI}T$ zrn;$@j^i8v79RgqLw>JF+8V@H#TO>Uvf(pVuwheK%tb}TEt8WusT5JDV6 z=QXv-Q`WANz5>Z0pB&?uWNL{+upTR(Yd;p+U62V(cvulX)HJ1wmy?vgkZGqeS=9uw zN!1NvhwLP}zlHVU~ zdX|@*Rd<)efL+&FT}i|3!e(HhoedhtDTl6N?M{N-6Kk}A#!&z+<6yznD6(*HUc{a# zl@8*T`tj^XD_`8#fCQF9WZN|KMB>4Ck!8MBYNeNN2h*vzY|A!~yQE>SosBh$16+DR z?sexRmYT#7dF8I9VryqBi8UAsFG?F+9jdmaM5eX}OgrxKM2qJk-SO5M?L4q^ zgx<)H?cn06>iJ@=vO<>j!HP%22`n%+in}I7x7_7Z4tC(&p>$|8Kd-~(j)rXphvqN&NrxNq828eH>C)3((~%}6teei;Y*Oh z;CiC}&Br?jOCf29y3z2i~gYi{Zc;0J_dF6!A`k$eu*(Qz)rIxg=XTq zi_1r5;a4M2t*-P=`RBQh><49|<@X~;SQTEoMmRe6nDnuJJ1HBt5jk;#& zaEfN^cpT3H)=uZko?cp#O<77w@dN*_H&3Q^jdp&eIMcAPaHH-g+hrrkSZ{CnPq z;7`sa7wFVa;?yGDripz6nMOHtTdn*G@BXL|OZGpB{I_Yr`o_BZE2iYtfd>8Z?1WcNDv;0Y z{P90#Um1EvqnzoSDon0fE!E0NUV4H{Y>!1qjC6Yjb37RyFVTR&_A2t(;U2G&=_`~L zwE)~GBdH=D3cjt;tImysm^5(vLm;3-Pd4~jsDKLrED&XR+lQA+OxZBy__G|cyD;kZ!7Ut7dR@uS6bnA{f!y)9rxE=+dTNS8vtY{%a{gzK8S|ePowNm zZ#cp>vPMl^l!g+D=fXp{ei#ez{RKw;B@??+@RA)9UcS35x30a5QZO&zC)DB;B=w)! z6|VEP_=(L#!6=s;!cFB1x745E<~wk>GRqg5mXr{JiNq|I*+6I=bY;If3Z)5!ODqL!x9blW9Qr-Aj|}&^IW--pOsJf;i_SW|5~`w?G7)w;YOZFWTJ*Xz50vF1SsKCuOVc;@8G9t zl}`0BXLj9!S1Tc6TwpAB>0ez>=kZSjHc!YtCVrzZ-6Y2k+%%25p|5r)WbF8Ab2tZu zy}Wir*pfSQom%$gOz)=ARaL0Mm~JZ>$zvciNZtuW`aT^JKly?Ucx05*ST=wLR;Q;y z^fy{|syosmJX3B-w7H)yN73+?38ZUhl)c3pxvN2HTb#buqnXSDWNw$CpofiFIfl?g&xS>Vw$)J-s%~USa^$&J&aD%M~ zPOhLQ>{>qtDEkC(50jU#p*G5i0Ha-VkPp8Ayo4C)P3R-!eV^AVqw?lU@E?-wXVCe9 zoft8tT2r_+%MhI6ziaxB z`q-~T>cDTsz?&LU2A_ewm^jN=ARW+mQ_$^F0KaqSNc1C(i`-|LXwJE2JI{=>K|LNE z_EfIOZFGo>){JgALw5lV=e8opaic*yULP_5$Gr4fq>J1gQQ&UcyE19!3Lza*f*rS=g=&ky*=G}FxZj2e8jx$k% zT1V|fF=dVNR`9iQ1rh@(CNu7{2$P!_kq1mfSD!F(mYbH7*OGe%V{|v}@fSFuD>WL?tK|3{U`F4>iPdS(<=VL*ereDYi^+c6QAHWkl6fhVo4m6wQ=NitapMx z(}D=`ZpkkIuLl`xJg#^!uHl^AW@dE-ae-^KGxDuoGXfdk_z#B^w#yYcgJ+I!T4;JO z(BU{8pHX@&#cC5IDuOOxYqI2zhb2I+|EG>b6Vj89MyO3a1ghXN91rl`!_)>qPyR?j z;_=d9=dmoQf{HaDsBGI8pRWL^V~?qlOuC3=xp(A{5CAiXwD9U{AZqKH`L1E1JdyZcN2o#oIb z=cF1X2xIKX;BugJcY)IIG1NVA`cD@20$`bhB`6Tbo|`nNv{wc$;z1ITHtccY&Z6vO zB;E&qA`XY(jgd2H_qL5?5X)(mX7tP0pbmMh*O+NbT)o}fEx#l$&H`C61ePpSM*ifr zKCvb-BYUtf*)WIwasbZ|!yC!!NhleU&IN%yJfLy{kH~o;eE+*c_30SYhzqBY9DkM^cl#BrLd&Kc79fmc zI4@6f+dbV&u?EkM}9A;S9a`}|Z));LUD3$Ld2w-u)tNu8PuL-mm^aL; zwm*nBBjk(YSw3KU^w6m+4LyAyeS!Ui9j5?%7?#v;}lVqu25c5zhYdW9@F8D zM0c|F;c+t>E&=NHZNWLL%P=*b`=?0ZiEYT`1#n2LO-{+c<2zT?Gke4ngJ4Xy$I1$i z1KJ<2?Z+LgJItmsmxXJ&LHE=kLuJ}P5{~@EkZ&2+M6~Zs;$sb{Ge&J5$RybDQet)_ z7NPk(n5c`q7d~oLWhKJKW(yQarr}~~|3Gjxb`JeeEl_-?IN$6<5+f43%<|Wi`Vixm z5l{|PB?IS$9DfxYkvVm|g0_!QD~|bLAU8S4@Y-oIuL@&-dW5$;sTl>HIvB8D%~<4hTTbqImuBX{W?fy-jqgu1Q0oDyXjK zsyTtB2Z)7of{5u=idT|nV`$l zBQ{u#pRCz{;i?8`on>*AwWw1?wZ$Z_&PPKE(e0B{goEmfPgLKxrDli0-@T@bl`*I|AB3nkz*;b}J59CL#Y?5C#IBTNPY?R5 z-jU~fx6hbq`cAm-nw0mFWdG1F+K8XTzoS= z)PDpz5Cz_&=Ha~`By^=zn%c_*-Z{bCo^28{I?csd-Ws*dB~9ZQSo7*|igNE0W}@aX zO+4M_k3+B&)tQ>OIf&o(Un3FsfE17iTfM>j|7s)mQwcW99Sb>Um?)cf!Pv`_E_mt_M zwFvf%FavemqtRl$V71b&;V~MG_MGWRCPvBv8xrEG#*kjpV|qCN{QUDVs(PJ~5c8rS zcn{`xl4go9OR)l*?2__i%HY_~{Llc5iz{GsB1iFQm1<7xLs;|yCyCTv4!J!P+=gQN z)H%op(GmalsAG7W5piDl=`$BW64dS$1M2l38x{3WpC)&j;xgl$9|rn|R>H&3 M$||HDF;D;i0Grw^%K!iX literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-9_hu_bae9a262462e5d36.webp b/public/images/blog/blog-9_hu_bae9a262462e5d36.webp new file mode 100644 index 0000000000000000000000000000000000000000..f95920a34adde52c1220aea5e13949a1f1702f08 GIT binary patch literal 76004 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 K@R3RlCtv^!C~^7# literal 0 HcmV?d00001 diff --git a/public/images/blog/blog-9_hu_e62b76c2afdef019.jpg b/public/images/blog/blog-9_hu_e62b76c2afdef019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb6d4addef6c0b89cac8051a28850ea244498eff GIT binary patch literal 65309 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�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 literal 0 HcmV?d00001 diff --git a/public/images/project/project-3.jpg b/public/images/project/project-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84733de28c5128e114c16288dadaa0c67686de1a GIT binary patch literal 158428 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 R4HRvIB)`dtRtOse{9nA$1Z)5R literal 0 HcmV?d00001 diff --git a/public/images/project/project-3_hu_180054984159acb.webp b/public/images/project/project-3_hu_180054984159acb.webp new file mode 100644 index 0000000000000000000000000000000000000000..a90fe04ddfe699defce1ac9f38042488dcd19bdb GIT binary patch literal 25586 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

LcmjT+zpi>(!C`U(^hFW(8Z)3VyNJsJbq=H{?W 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 literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html index 8651446..2ef8931 100644 --- a/public/index.html +++ b/public/index.html @@ -469,7 +469,7 @@

- Student Applied Computer Science - Cybersecurity + Student Applied Computer Science

Howest University of Applied Sciences
@@ -2151,6 +2151,8 @@ + + @@ -2159,6 +2161,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Smart Home Trap: Isolate or Be Owned + + + + + + @@ -2508,7 +2581,7 @@

Seiko SARV001: The JDM Sleeper That Punches Above Its Weight

-

A closer look at the Seiko SARV001—a Japanese Domestic Market gem that offers …

+

A closer look at the Seiko SARV001, a Japanese Domestic Market gem that offers …

Read More diff --git a/public/index.json b/public/index.json index 52feb51..32e8752 100644 --- a/public/index.json +++ b/public/index.json @@ -130,4 +130,4 @@ -[{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nR B B R R e r r e e n o o n n d w w d d e s s e e r e e r r e r r e e r r r N N B e e B B r t t r r o w w o o w o o w w s r r s s e k k e e r : : r r : : : U U B R R C D e L L o i g R R m d i e e m C n q s i o N u p t m a e o N m v s n a i i t s v t g ( e i N a ) ( g a t ) a v i t i o i g n o a ( n t ) ( i ) o n ( ) IPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_54124c601931f717.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"498\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_cc034401e2f1274e.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In deze eerste aflevering van Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses like “Glutamine” in semester five. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In deze eerste aflevering van Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses like “Glutamine” in semester five. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nO t h e r N e t L w L o M r N k R / H N o W D B s i N T t n S - d N o S S C w e o s r b n v r n C e o e l D r n a c i N o d t e S ( c i n d r a N o t Q o e s e n u w s t t e n p w t r ) o r o s o y n e r e s q k n R ( e u d e h e R s s o s e p s t s r o t p e n n o s d a n p e m d o r e e n ) r s e ( c l a i m e d I P ) IPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In deze eerste aflevering van Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses like “Glutamine” in semester five. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nC D C R C l N l e l i S i s i e e p e n n o n t t n t d e C r l D i L R N e o e S n c s : t a C p : l l o R N i n e N e e d s o t n e o : t r l r : : v e L e s L I A p M u h o N h t o n R a h s s / v e t e N e n n B t a T ' i m - h c e N o a S s t t e Q ' u v e ( i r s a y p o S ( o M W f B h e / o d H T h r T a e P s p l ' y h ) o s t ' ? ) IPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In deze eerste aflevering van Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses like “Glutamine” in semester five. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In deze eerste aflevering van Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses like “Glutamine” in semester five. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In deze eerste aflevering van Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible—it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable—perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides secure remote access, managed through PiVPN. Client profiles are stored and rotated easily. Firewall rules are handled by iptables, and public IP changes are tracked using ddclient.\nIRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node—quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides secure remote access, managed through PiVPN. Client profiles are stored and rotated easily. Firewall rules are handled by iptables, and public IP changes are tracked using ddclient.\nIRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides secure remote access, managed through PiVPN. Client profiles are stored and rotated easily. Firewall rules are handled by iptables, and public IP changes are tracked using ddclient.\nIRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides secure remote access, managed through PiVPN. Client profiles are stored and rotated easily. Firewall rules are handled by iptables, and public IP changes are tracked using ddclient.\nIRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides secure remote access, managed through PiVPN. Client profiles are stored and rotated easily. Firewall rules are handled by iptables, and public IP changes are tracked using ddclient.\nIRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_40eec1330ef232bd.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"480\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_74a5edf51d9d285d.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides secure remote access, managed through PiVPN. Client profiles are stored and rotated easily. Firewall rules are handled by iptables, and public IP changes are tracked using ddclient.\nIRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm You can enhance the VPN section of your blog post by clearly showing why PiVPN is especially useful in a low-maintenance, diskless setup. Here\u0026rsquo;s a revised version of that section with focused details added:\nVPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nLet me know if you\u0026rsquo;d like to plug this directly into the Markdown file or add screenshots/terminal views. IRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nLet me know if you\u0026rsquo;d like to plug this directly into the Markdown file or add screenshots/terminal views. IRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nLet me know if you\u0026rsquo;d like to plug this directly into the Markdown file or add screenshots/terminal views. IRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nLet me know if you\u0026rsquo;d like to plug this directly into the Markdown file or add screenshots/terminal views. IRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd ngIRCd runs a lightweight IRC service for internal use. Configs are persistent, logs are not. It\u0026rsquo;s simple and fast, making it ideal for LAN or VPN chat.\nMaking It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nListen on all interfaces with both unencrypted and encrypted ports Autojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. Security Considerations\nTLS is enabled with Let’s Encrypt certificates. DNS and Ident lookups are disabled for privacy and efficiency. Client hostnames are cloaked to prevent IP leakage. Connection and join limits help mitigate spam/flooding. Operator credentials are stored locally and not broadcast. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with—without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nListen on all interfaces with both unencrypted and encrypted ports Autojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with—without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nListen on all interfaces with both unencrypted and encrypted ports Autojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with—without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nListen on all interfaces with both unencrypted and encrypted ports Autojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with—without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with—without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Lean and Local: DNS, VPN, IRC and Ad Blocking with Alpine Linux Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with—without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with—without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with—without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated—anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental—it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Educational institutions like Howest can integrate Matrix into cyber exercises or incident response labs to simulate resilient communication under attack. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer—especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse modular.im for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based—no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nThe Developer Angle Matrix is not just for users. It’s a platform.\nYou can build:\nBots (in Python, Node.js, Go, Rust) Custom clients (CLI, TUI, mobile-first) Custom bridges (via matrix-appservice-bridge) Embedded Matrix instances (for games, IoT, etc.) Full-stack apps with Matrix as the realtime backend APIs are clean, well-documented, and battle-tested.\nFinal Thoughts Matrix is what the future of communication could—and should—look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging—Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Educational institutions like Howest can integrate Matrix into cyber exercises or incident response labs to simulate resilient communication under attack. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse modular.im for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nThe Developer Angle Matrix is not just for users. It’s a platform.\nYou can build:\nBots (in Python, Node.js, Go, Rust) Custom clients (CLI, TUI, mobile-first) Custom bridges (via matrix-appservice-bridge) Embedded Matrix instances (for games, IoT, etc.) Full-stack apps with Matrix as the realtime backend APIs are clean, well-documented, and battle-tested.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Educational institutions like Howest can integrate Matrix into cyber exercises or incident response labs to simulate resilient communication under attack. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse modular.im for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Educational institutions like Howest can integrate Matrix into cyber exercises or incident response labs to simulate resilient communication under attack. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_49f98f56b956af12.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"498\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_4ef932f257939b99.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"Matrix: Building a Decentralized Communication Future If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works—and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC)—a service on the domain controller—issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain—from domain users to service accounts—is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name)—even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases—but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere—effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them—opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nForshaw demonstrates how these trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets—valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash—not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nIn Forshaw’s lab setup, this is achievable from any domain user account. No alerts triggered—unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help—but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works—and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC)—a service on the domain controller—issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain—from domain users to service accounts—is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name)—even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases—but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere—effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them—opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nForshaw demonstrates how these trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets—valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash—not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nIn Forshaw’s lab setup, this is achievable from any domain user account. No alerts triggered—unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help—but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works—and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC)—a service on the domain controller—issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain—from domain users to service accounts—is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name)—even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases—but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere—effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them—opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets—valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash—not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered—unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help—but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works—and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC)—a service on the domain controller—issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain—from domain users to service accounts—is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name)—even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases—but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere—effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them—opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets—valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash—not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered—unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help—but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t—but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets—to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate—typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP—exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits—just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper—TLS, OTA updates, encrypted storage—physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot—with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure—it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical—especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically—ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under $200 USD, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under $200 USD, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"Securing Cyberspace: Belgian Cyber Command at Howest On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"Cyber Defence on the Digital Frontline: A Mission with NATO On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement—even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk You don’t need enterprise gear. Devices like the TP-Link Omada series, UniFi, pfSense, and OpenWRT all support VLANs out-of-the-box.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed—maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement—even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk You don’t need enterprise gear. Devices like the TP-Link Omada series, UniFi, OPNsense, and OpenWRT all support VLANs out-of-the-box.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed—maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement—even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs—especially if you install OpenWRT, OPNSense, or DD-WRT. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all—just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed—maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nHere’s the updated ending for your blog post, with a \u0026lt;notice tip\u0026gt; section listing OpenWRT-supported devices that are commonly available and reliable:\nYour lightbulb shouldn’t have access to your tax documents.\nLooking for OpenWRT-compatible hardware? You don’t need to spend big. Many consumer routers and access points work perfectly with OpenWRT. Here are some solid picks:\nTP-Link Archer C7 – Stable, cheap, widely supported GL.iNet GL-AX1800 (Flint) – Compact, preloaded with OpenWRT Netgear R7800 – Powerful and popular for VLAN setups Linksys WRT3200ACM – Open-source classic, great for advanced configs Ubiquiti UniFi 6 Lite – Works via OpenWRT with some tweaks Check openwrt.org/toh/start for full compatibility before flashing.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nHere’s the updated ending for your blog post, with a \u0026lt;notice tip\u0026gt; section listing OpenWRT-supported devices that are commonly available and reliable:\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices. Popular picks include the TP-Link Archer C7, GL.iNet Flint, Netgear R7800, and Linksys WRT3200ACM.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nHere’s the updated ending for your blog post, with a \u0026lt;notice tip\u0026gt; section listing OpenWRT-supported devices that are commonly available and reliable:\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices. Popular picks include the TP-Link Archer C7, GL.iNet Flint, Netgear R7800, and Linksys WRT3200ACM.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nHere’s the updated ending for your blog post, with a \u0026lt;notice tip\u0026gt; section listing OpenWRT-supported devices that are commonly available and reliable:\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"The Smart Home Trap: Isolate or Be Owned Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"}] \ No newline at end of file +[{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume whilst changing day\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume whilst changing day\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume whilst changing day\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume whilst changing day\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume whilst changing day\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume whilst changing day\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume whilst changing day\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"},{"categories":["iot","hardware","reverse engineering"],"contents":"When you pay €22.95 for a pan-tilt-zoom security camera, you’re not buying enterprise-grade security. But what if you’re also buying root access through an SD card?\nThis post documents a hands-on assessment of the LSC SMART PTZ Camera (Model IPC167), a low-cost, Tuya-based IoT device sold at Action. While it ticks many boxes on paper, TLS, OTA updates, encrypted storage, physical access opens a completely different chapter.\nTriggering Debug Mode with a MicroSD Card Under normal operation, the camera exposes a single LAN control port and requires authentication. But the real surprise lies in how it reacts to external media.\nInsert a specially crafted SD card containing certain files, and the device silently enables Telnet and FTP services at boot, with root access using credentials from the card. No prompt. No warning. The system trusts the card implicitly.\nThis is intended for factory debugging, but it still exists in the retail device, and there are no warnings in the user manual. Once active, Telnet gives full shell access with UID 0. All processes run as root. It’s not just insecure, it’s reckless.\nUART Interface: Disabled Login, But Still There A quick teardown revealed a UART interface on the PCB. While login is currently disabled, its presence adds another attack vector. UART could enable firmware dumping, memory access, or even re-enabling local shells in earlier firmware revisions.\nCombined with the SD card behavior, it paints a clear picture: if you can touch the device, you own it.\nWhat Could Go Wrong? Plenty. With root access via SD card:\nYou can replace binaries or inject backdoors. Extract credentials, keys, or tokens stored in the SQLite database. Modify the video stream, disable motion detection, or proxy footage. Use the device as a pivot point in a local network attack. All of this without triggering any alarms, logs, or user notifications.\nBut It Encrypts Traffic? Yes. TLS over MQTT for telemetry. Encrypted UDP for video. Encrypted SQLite storage. From a remote attacker’s perspective, it looks secure.\nBut physical access breaks the whole model. And physical attacks are not just theoretical, especially for devices placed outdoors or in public environments.\nWhat Can Be Done? Fixing this requires more than software updates. It’s about rethinking assumptions.\nFactory debug hooks should be disabled or removed before shipment. Bootloaders should verify signatures, not blindly trust SD cards. Telnet should never be enabled automatically, ever. Sensitive functions should not run as root unless absolutely required. Until then, buyers are getting more than they bargained for.\nFinal Thoughts This was a cheap camera. It delivered on video quality and mobile app UX. But under the surface, it’s a wide-open platform for attackers with a screwdriver and a microSD card.\nIf you’re building IoT gear: assume physical access and plan for it. If you’re buying IoT gear: assume nothing until you’ve torn it apart.\nSecurity is more than encryption and TLS. It’s what happens when someone walks up, pops the back cover, and flips the whole threat model on its head.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-8_hu_a605adb3511bef5f.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-8_hu_c5615396480723ed.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-8/","title":"Cheap Camera, Expensive Risk: Hacking an IoT PTZ Camera"},{"categories":["cybersecurity","offensive","windows"],"contents":"Kerberos, introduced to Windows with Active Directory in 2000, is widely seen as a secure, modern replacement for NTLM. And yet, in the hands of an attacker, it becomes a double-edged sword. This post explores how Kerberos works, and how it can be abused through techniques like Kerberoasting, delegation abuse, and ticket impersonation.\nHow Kerberos Actually Works Authentication starts when a user logs in and the Key Distribution Center (KDC), a service on the domain controller, issues a TGT (Ticket Granting Ticket) encrypted with the user’s secret. This lets the user request service tickets to access other services without sending credentials again.\nFrom a security model perspective, this is elegant. Credentials never cross the wire. Everything is based on secret keys and symmetric encryption. But this also assumes every piece in the chain, from domain users to service accounts, is configured securely.\nSpoiler: they rarely are.\nKerberoasting: Plaintext Passwords in Disguise If a service account uses a weak password, it\u0026rsquo;s game over.\nService tickets are encrypted with the service account’s password hash. Any domain user can request a ticket to any SPN (Service Principal Name), even without legitimate access. The attacker just needs to capture the ticket and brute-force it offline.\nRequest SPN ticket → Extract ticket → Crack with hashcat Kerberoasting doesn’t require elevated rights. Just domain access. And if that SPN maps to a privileged account (e.g. Domain Admin used for SQL service), cracking that password opens the domain.\nDefault AD configs don’t restrict this. Detection? Hard. Ticket requests look normal. Mitigation? Use strong, random passwords for service accounts. Monitor ticket requests for unusual patterns.\nDelegation: More Trust, More Problems Kerberos supports delegation, allowing services to act on behalf of users. Useful for SSO scenarios like web apps accessing databases, but dangerous if abused.\nUnconstrained Delegation lets a service impersonate any user who authenticates to it. If an attacker compromises such a host, they can extract users’ TGTs and use them elsewhere, effectively becoming them. Golden ticket territory.\nConstrained Delegation tries to limit this to specific services. But it’s often misconfigured. And worse, Resource-Based Constrained Delegation (RBCD) lets target systems define who can delegate to them, opening up attack chains where a low-priv user adds a rogue computer object and escalates.\nThese trust edges form a privilege escalation graph. BloodHound maps this beautifully.\nTicket Forgery and Impersonation Once an attacker gets the KRBTGT account’s hash (e.g. via DCSync), they can create Golden Tickets, valid TGTs for any user, any group, any time. Total domain compromise.\nMore subtle is Silver Ticketing. Here, the attacker forges only the service ticket, not the TGT. Requires the service account’s hash, not KRBTGT. Harder to detect. Ideal for lateral movement.\nTools like Rubeus automate this: asktgt, s4u, tgtdeleg, kerberoast, golden, and silver.\nWorked Example: Kerberoasting with Rubeus Rubeus.exe kerberoast /format:hashcat /user:svc_sql /domain:corp.local → Dumps service tickets in hashcat format.\nhashcat -m 13100 hashes.txt rockyou.txt → Cracks the SPN ticket. If the password is weak, you’re in.\nThis is achievable from any domain user account. No alerts triggered, unless you’ve configured ticket monitoring.\nFinal Thoughts Kerberos isn’t broken. But it’s trust-heavy. And Windows environments are often too trusting.\nStrong service account hygiene, strict delegation configs, and monitoring ticket activity are the bare minimum. Defensive tools like klist, event ID 4769, and Kerberoast detection rules help, but only if actively used.\nIn red team ops, Kerberos attacks are quiet, credential-free, and highly effective. They don’t break the protocol. They exploit how admins use it.\nWant to defend the kingdom? Start by defending the keys.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-7_hu_35062733e5b10c39.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"371\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-7_hu_a100653844898565.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-7/","title":"Kerberos Under Siege: Abusing the Trust Backbone of Windows Domains"},{"categories":["self-hosting","networking","alpine-linux","vpn","dns"],"contents":"Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.\nWhy Diskless? The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.\nBase Setup The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.\nDNS and Ad Blocking: Blocky Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.\nHighlights:\nLocal resolution for custom domains like directme.in Cloudflare, Google as upstream resolvers Per-IP blocking rules Prometheus metrics for monitoring Example config:\nblocking: denylists: ads: - https://big.oisd.nl/domainswild vtm: - /home/joren/dns/vtmgo.txt clientGroupsBlock: default: - ads 192.168.178.123: - vtm VPN: WireGuard via PiVPN WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.\nKey benefits in this setup:\nClient management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:\npivpn -a # add client pivpn -r # remove client pivpn -off \u0026lt;name\u0026gt; # temporarily disable Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.\nMonitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.\nBackups included. One command backs up all configs: pivpn -bk.\nExample output:\n::: Connected Clients List ::: Name Remote IP Virtual IP Bytes Received Bytes Sent Last Seen Phone 84.199.x.x:60042 10.60.150.2 439MiB 3.3GiB May 29 2025 - 22:39:56 In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.\nIRC: ngIRCd For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.\nThe server is configured to:\nAutojoin clients to a default #General channel Support cloaking for user privacy Restrict joins per user/IP to prevent abuse Provide operator access with predefined credentials Disable DNS and Ident lookups for speed and reduced leakage Here\u0026rsquo;s a snapshot of the active configuration:\n[Global] Name = irc.alpine4071 Info = RAM-only IRC Server Listen = 0.0.0.0 Ports = 6667 MotdPhrase = \u0026#34;Welcome to our RAM-only IRC server!\u0026#34; AdminInfo1 = IRC Server AdminInfo2 = Anywhere On Earth AdminEMail = admin@irc.alpine4071 [SSL] CertFile = /home/joren/certs/fullchain1.pem KeyFile = /home/joren/certs/privkey1.pem Ports = 6697, 6698 Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:\n[Channel] Name = #General Topic = General Channel Autojoin = yes Why ngIRCd?\nIt works well on memory-constrained systems. It doesn’t require database backends or scripting engines. It supports modern essentials like TLS, cloaking, and structured limits. It’s simple to secure and configure, even when exposed to the open internet. This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.\nYou can connect today via:\nirc://alpine-4071.duckdns.org:6667 (plaintext) ircs://alpine-4071.duckdns.org:6697 (TLS) Making It Stick: LBU To persist changes in a stateless system, I use Alpine’s lbu:\nlbu include /etc/blocky/config.yml lbu include /etc/ngircd/ngircd.conf lbu commit -d This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.\nRunlevel Integration All services are enabled through OpenRC:\nrc-update add blocky default rc-update add wg-quick default rc-update add ngircd default rc-update add iptables default Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.\nFinal Thoughts Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-3_hu_180054984159acb.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"464\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-3_hu_64d37c2e369de612.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-3/","title":"Lean and Local: DNS, VPN, IRC and Ad Blocking"},{"categories":["cybersecurity","communication","decentralization"],"contents":"If you’ve ever switched between Slack, WhatsApp, Discord, Teams, Signal and Telegram in a single day, you’ve felt the cost of digital fragmentation. We live in a world where communication is siloed into centralized apps, each with its own rules, limits and vulnerabilities. Matrix proposes an alternative: a universal, open, decentralized protocol for real-time communication, where users control their data and messaging isn\u0026rsquo;t trapped in walled gardens.\nIn this post, we explore what Matrix is, how it works, where it\u0026rsquo;s being used, how you can adopt it yourself, and why it matters for the future of cybersecurity, collaboration, and digital sovereignty.\nWhat is Matrix? Matrix is an open standard for interoperable, real-time communication over IP, designed to provide a decentralized alternative to proprietary messaging platforms. Just like email or the web, Matrix is federated, anyone can host a homeserver, and users on different homeservers can still talk to each other.\nMatrix isn’t an app. It’s a protocol. There are many clients (like Element) and server implementations (like Synapse) built on top of it. Communication is handled via JSON over HTTPS, using persistent rooms and event-based message history, with eventual consistency across the federation.\nMatrix supports:\nText messaging (1:1 and group) End-to-end encryption (Olm/Megolm) Voice and video calls (WebRTC) File sharing Threaded conversations Bridging to other networks (Slack, IRC, Telegram, WhatsApp, etc.) Bots, widgets, and integrations Federation and Interoperability The power of Matrix lies in federation. Just like you don’t need a Gmail account to email someone using Outlook, you don’t need to be on the same Matrix server to chat. This model distributes control across the network, eliminating single points of failure and censorship risk.\nBridges extend this idea further by connecting Matrix rooms to non-Matrix platforms. Want to keep your team on Matrix but still message a colleague on Slack? You can. Matrix becomes a universal glue layer for all communication.\nSupported bridge targets include:\nSlack Discord Microsoft Teams IRC Telegram WhatsApp Signal (community bridges) Security: End-to-End Encryption by Default Matrix takes security seriously. Its end-to-end encryption (E2EE) is based on the Olm and Megolm ratchets, inspired by the Double Ratchet used by Signal. In private rooms, encryption is enabled by default.\nEncryption features include:\nForward secrecy Device verification and cross-signing Secure backup with recovery keys Key sharing and gossiping for reliable message delivery Support for multiple devices per user In contrast to Signal, Matrix\u0026rsquo;s E2EE is multi-device aware by design. You can log in from your phone, laptop, and tablet, and still maintain encryption with all peers.\nReal-World Usage Matrix is not just experimental, it’s deployed at scale:\nThe French government built Tchap, a Matrix-based internal messaging system used by over 30 ministries. German Bundeswehr and healthcare services use Matrix to comply with national data sovereignty and security standards. Mozilla, KDE, F-Droid, and many FOSS communities use Matrix for open collaboration. The European Commission and NATO-affiliated organizations explore Matrix for secure, federated communication in cyber operations. Matrix in Cybersecurity Contexts In red team/blue team simulations, robust and flexible comms are critical. Matrix excels in:\nOut-of-band communication when primary networks are compromised. C2 channel simulation in adversary emulation labs. Logging and transparency during incident response (Matrix rooms retain full audit trails). Bridging internal and external teams (e.g., SOC ↔ pentest team ↔ management). Security testing: Matrix clients and bridges offer exploitable surfaces for training scenarios. In exercises like Locked Shields, where real-time coordination under pressure is key, Matrix could function as a fault-tolerant, cross-team coordination layer, especially when bridged to legacy systems.\nRunning Your Own Homeserver Matrix is self-hostable. This gives full control over identity, data, and federation policies. The most popular server implementation is Synapse, but others like Dendrite (Go, lightweight) and Conduit (Rust, performance-focused) are gaining traction.\nMinimum Setup:\nSynapse (Python-based) PostgreSQL backend Reverse proxy (NGINX) DNS (SRV + .well-known for federation) TLS via Let’s Encrypt Optional: SSO, LDAP, backup, TURN server for VoIP Pro Tips:\nUse https://element.io/pricing for managed hosting if self-hosting is too much overhead. Enable E2EE backup to retain message history across devices. Harden your server: rate-limit federation, restrict registration, enforce TLS ciphers. Limitations and Workarounds Matrix is powerful, but not perfect:\nFederation sync can be resource-heavy on large rooms. Encrypted rooms sometimes lag on low-powered clients. Bridges can break when third-party APIs change. Identity is room-based, no global handles like @user across servers. Message ordering across federated servers is eventually consistent, not immediate. Work is ongoing on Matrix 2.0, which includes faster sync (Sliding Sync), a new media repo spec, and better thread handling.\nFinal Thoughts Matrix is what the future of communication could, and should, look like: open, secure, decentralized, and user-controlled. As central platforms tighten their grip on data and limit interoperability, Matrix flips the script. It\u0026rsquo;s not just a protocol. It\u0026rsquo;s a philosophy of sovereignty, transparency, and trustless interoperability.\nWhether you\u0026rsquo;re building a secure system, training the next generation of cyber professionals, or just tired of fragmented messaging, Matrix offers a future where you own your conversations.\nTip\nVisit matrix.org to learn more, or get started today at element.io.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-6_hu_738eea9b9eff29e3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"333\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-6_hu_c559f46af58d7b01.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-6/","title":"Matrix: Building a Decentralized Communication Future"},{"categories":["watches","jdm","seiko"],"contents":"In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.\nDesign \u0026amp; Build Quality The SARV001 boasts a 42mm stainless steel case with a thickness of 11.6mm, offering a balanced presence on the wrist. Its white sunburst dial exudes a subtle elegance, complemented by applied indices and luminous dauphine hands for enhanced legibility. The watch features a day-date complication at 3 o\u0026rsquo;clock, with the unique option to display the day in either English or Japanese Kanji, adding a distinctive JDM touch.\nSARV001 Kanji\rSARV001 Lume\rThe case is protected by Seiko\u0026rsquo;s proprietary Hardlex crystal, known for its durability and resistance to shattering. A see-through case back reveals the inner workings of the movement, providing a glimpse into the watch\u0026rsquo;s mechanical heart.\nMovement \u0026amp; Performance At its core, the SARV001 is powered by Seiko\u0026rsquo;s in-house 4R36 automatic movement, featuring 24 jewels and a 41-hour power reserve. This movement supports both hacking and hand-winding, offering versatility for daily wear. With a water resistance of 100 meters, the watch is well-suited for everyday activities, though it\u0026rsquo;s not designed for diving.\nWearability \u0026amp; Versatility The watch\u0026rsquo;s 22mm lug width and drilled lugs make strap changes straightforward, allowing for customization to suit various occasions. Whether paired with its original stainless steel bracelet or a leather strap, the SARV001 transitions seamlessly from casual to formal settings.\nValue Proposition Priced under 150 EUR, the SARV001 offers features typically found in higher-end models. Its combination of classic aesthetics, reliable mechanics, and thoughtful details like the Kanji day display make it a standout choice for both novice and seasoned collectors seeking a quality timepiece without breaking the bank.\nFinal Thoughts The Seiko SARV001 exemplifies the brand\u0026rsquo;s commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-9_hu_18953a22f9755bfc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"650\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-9_hu_e62b76c2afdef019.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-9/","title":"Seiko SARV001: The JDM Sleeper That Punches Above Its Weight"},{"categories":["cybersecurity","offensive","network"],"contents":"In many internal networks, outdated or misconfigured protocols silently create attack surfaces. This post explores how attackers abuse name resolution fallbacks and IPv6 autoconfiguration to capture and relay NTLM credentials using Responder and mitm6.\nName Resolution Chaos When Windows can\u0026rsquo;t resolve a hostname via DNS, it falls back on legacy protocols: LLMNR (Link-Local Multicast Name Resolution), NBT-NS (NetBIOS Name Service), and increasingly mDNS in mixed environments. These protocols ask anyone nearby: “Do you know who somehost is?”\nAn attacker on the local network can answer \u0026ldquo;yes\u0026rdquo; and claim to be that host. That’s exactly what Responder does. It listens for these requests and pretends to be the missing server, prompting clients to authenticate, typically using NTLM.\nIPv6: Enabled by Default, Forgotten by Admins Even in IPv4-only networks, most Windows clients have IPv6 enabled. If there\u0026rsquo;s no DHCPv6 server, they use router advertisements to configure themselves. mitm6 abuses this by spoofing a rogue IPv6 router, setting itself as the DNS server for all hosts.\nOnce clients start resolving names through the attacker\u0026rsquo;s DNS, the attacker can spoof responses and trick clients into connecting over SMB, LDAPS, or HTTP, exposing NTLM hashes.\nCapturing vs. Relaying Responder captures credentials (NTLMv1/v2), which can be cracked offline with tools like hashcat. But it\u0026rsquo;s often more powerful to relay them live to a legitimate service.\nTools like ntlmrelayx allow relaying to:\nSMB: for file access, command execution, or dumping secrets via secretsdump.py LDAP/LDAPS: to enumerate AD users, modify objects, or create backdoor accounts HTTP/WSMAN: to access internal web apps or trigger remote code execution The success of the relay depends on the target’s configuration. If SMB signing or LDAP channel binding is enforced, the relay will fail. But in many networks, it isn’t.\nRealistic Attack Chain Launch mitm6 to poison IPv6 and become DNS for the subnet. Run ntlmrelayx with appropriate targets (e.g., --smb2support --target smb://10.0.0.5). Wait: a victim resolves an internal name (e.g., fileshare), the attacker responds. The client connects to the attacker thinking it’s the fileshare and sends NTLM credentials. ntlmrelayx relays these to the actual target server. If successful, the attacker gains authenticated access. In parallel, Responder can be used for LLMNR/NBT-NS-based interception in IPv4 networks.\nMitigation This isn\u0026rsquo;t new, but it\u0026rsquo;s often neglected. To prevent these attacks:\nDisable LLMNR and NBT-NS via Group Policy. Disable IPv6 on clients if it\u0026rsquo;s not explicitly required. Enforce SMB signing and LDAP channel binding. Segment your network to reduce the blast radius. Prefer Kerberos authentication over NTLM where possible. Monitor for rogue IPv6 RAs and anomalous name resolution. Final Thoughts If you’re in a flat network with legacy protocols enabled, an attacker doesn’t need exploits, just presence. These are silent, no-packet attacks that rely on trust and misconfiguration. The tools are public. The fixes are known. Yet the exposure is still widespread.\nResponder and mitm6 aren’t magic. They just reveal what’s already broken.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-5_hu_e31b752cd8166a9a.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"343\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-5_hu_2496163d8ca0be9a.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-5/","title":"Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks"},{"categories":["networking","iot","cybersecurity"],"contents":"Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you\u0026rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.\nWhy Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue.\nIoT vendors prioritize cost and features, not security. Devices often ship with:\nDefault credentials No software updates Open ports and broadcast protocols Aggressive telemetry to unknown hosts A compromise is inevitable. The only question is: does that compromise stay local, or pivot deeper into your network?\nVLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered.\nVLANs let you:\nGroup devices by function (IoT, work, guest) Apply granular rules between segments Limit broadcast traffic and discovery protocols Deny unnecessary cross-talk And you don’t need enterprise gear to do this. Many consumer-grade routers and access points already support VLANs, especially if you install OpenWRT, OPNSense, or just Linux. Even some ISP-provided devices have basic VLAN tagging features tucked away in their advanced menus. You might not need new hardware at all, just better firmware.\nSample Home Setup Let’s say you have a smart home with:\nA Nest thermostat A Samsung smart TV A couple of Tuya smart plugs A doorbell camera Your personal laptop and NAS Step 1: Define VLANs\nVLAN ID Purpose Example Devices 10 LAN (trusted) Laptop, NAS 20 IoT Smart TV, plugs, doorbell 30 Guest WiFi Friends’ phones Step 2: Assign Interfaces\nMost routers allow you to map VLANs to interfaces or SSIDs. Use one SSID per VLAN for WiFi. Wire VLAN-tagged ports for wired devices.\nStep 3: Firewall Rules\nOn VLAN 20 (IoT):\nBlock → LAN (VLAN 10) Block → VLAN 20 (intra-IoT) Allow → DNS, NTP, and cloud endpoints Allow → Internet (443) Log → Any unknown destination Optional: Use static DHCP leases and force DNS through Pi-hole for logging and filtering.\nReal-World Examples Case 1: Smart TV\nBlocked LAN access. Within 5 minutes of boot, it tried to contact:\nSamsung cloud Akamai CDN Google DNS DoubleClick Random advertising domains Video streaming still worked fine. Everything else was noise.\nCase 2: IP Camera\nOn the LAN, it had access to the NAS and router UI. After VLAN isolation, its access was limited to outbound 443 and NTP. Still worked. Couldn’t snoop.\nCaveats \u0026amp; Limitations Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. Chromecast-style devices need special rules if you want casting from your main network. VLANs require managed switches or VLAN-aware APs. Guest VLANs may need bandwidth limits or isolation tweaks. Still, the benefits far outweigh the complexity.\nFinal Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you\u0026rsquo;re not alone. And if you haven\u0026rsquo;t noticed, maybe you should.\nSecurity in small networks doesn’t need to be complex. VLANs are one of the most powerful tools you can deploy for minimal cost. Set it up once. Sleep better forever.\nYour lightbulb shouldn’t have access to your tax documents.\nTip\nLooking for OpenWRT-compatible routers? Check the OpenWRT Table of Hardware for supported devices.\n","date":"May 30, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-10_hu_e27e2f85e226178c.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"406\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-10_hu_35c38cc09be1cad4.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-10/","title":"The Smart Home Trap: Isolate or Be Owned"},{"categories":null,"contents":"I built my personal blog using Hugo and deployed it on a lightweight Alpine Linux VPS. I chose this setup to have full control, keep things simple, and avoid bloated platforms or services. Here’s how the process went from site generation to live deployment.\nCreating the Hugo Site On my development machine, I created a new Hugo site:\nhugo new site howest-blog I used the professors-hugo theme and copied its exampleSite content into my project. I customized the layout, structure, and styling by editing content files, SCSS in assets/scss/custom.scss, and partial templates in the theme directory.\nAll content lives under content/, with separate folders for blog/ and project/, each containing .md files with front matter and Markdown content.\nCustomization I edited the config/_default/hugo.toml to configure site parameters like the base URL, theme, language, and menus. SCSS and image assets go in assets/, and are processed by Hugo\u0026rsquo;s pipeline. Static files like favicons are placed in static/.\nTo preview the site locally:\nhugo server To build the static site:\nhugo This generates everything in the public/ folder.\nVPS Deployment I rented a minimal Alpine Linux VPS and installed only what I needed. After setting up SSH and a basic nginx web server, I copied the public/ folder over using scp:\nscp -r public/* user@my-vps:/var/www/html On the VPS, I installed nginx:\napk add nginx And configured /etc/nginx/conf.d/default.conf to serve files from /var/www/html. Then I enabled and started nginx:\nrc-service nginx start rc-update add nginx Now my Hugo site is live and served directly as static files, no backend, no database, just HTML, CSS, and JS.\nWhy Alpine + Hugo? Alpine Linux is minimal and fast, perfect for serving static sites with low resource usage. Combined with Hugo’s speed and flexibility, I get a complete, performant setup that I fully control. It’s secure, lightweight, and easy to update, just rebuild and re-upload the public/ folder.\nThis setup is perfect if you want full control and minimal overhead for a personal blog or portfolio.\n","date":"May 29, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-2_hu_b10de0491c6514dc.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"278\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-2_hu_3550dd40bf159427.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-2/","title":"Building My Hugo Website on a VPS"},{"categories":null,"contents":"DRMDTool is an automation-centric utility designed to streamline the processing of .drmd files by tightly integrating with the N_m3u8DL-RE downloader. The tool offers robust automation via a watch folder and an intuitive web-based interface, significantly reducing the friction for managing and processing DRM-protected streaming content.\nWhat’s New DRMDTool has evolved into a comprehensive platform for batch downloading with enhanced support for user interaction and background processing. It features granular job tracking, dynamic download control (pause, resume, abort), and a refined WebSocket-based console for real-time command output. Subtitle handling now includes automatic downloading and conversion from VTT to SRT, and the downloader adapts based on metadata, organizing content into categorized directories.\nGoals and Use Case The primary aim is to automate .drmd file processing with minimal manual input. Users can configure download formats, specify directories, and enable real-time command broadcasting. DRMDTool is suitable for both interactive use through a web UI and headless automation in pipelines, supporting inotify or polling-based folder watching.\nHow .drmd Files Work A .drmd file is a structured JSON document that defines one or more encrypted media items to be processed by DRMDTool. It contains an Items array, with each item representing a specific media job. DRMDTool parses these entries to generate download commands for N_m3u8DL-RE.\nEach item includes:\nMPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. Keys: A comma-separated list of KID:key pairs (e.g., abcd1234ef567890:00112233445566778899aabbccddeeff). These are required for decrypting encrypted media streams and are passed directly to N_m3u8DL-RE using --key flags. Filename: The name to be used for the final output file. Subtitles: Comma-separated list of subtitle URLs in .vtt format. DRMDTool downloads and converts these to .srt, then muxes them into the final file. Metadata: A semicolon-separated string like Title;Type;Season (e.g., Example Show;serie;1) used to determine directory structure (Movies/Title or Series/Title/Season). Description and Poster: Optional fields used only for display in the web UI. Example .drmd Structure { \u0026#34;Items\u0026#34;: [ { \u0026#34;MPD\u0026#34;: \u0026#34;aHR0cHM6Ly9leGFtcGxlLmNvbS9zdHJlYW0ubXBk\u0026#34;, \u0026#34;Keys\u0026#34;: \u0026#34;abcd1234ef567890:00112233445566778899aabbccddeeff\u0026#34;, \u0026#34;Filename\u0026#34;: \u0026#34;ExampleShow.S01E01\u0026#34;, \u0026#34;Subtitles\u0026#34;: \u0026#34;https://example.com/sub1.vtt,https://example.com/sub2.vtt\u0026#34;, \u0026#34;Metadata\u0026#34;: \u0026#34;Example Show;serie;1\u0026#34;, \u0026#34;Description\u0026#34;: \u0026#34;Pilot episode\u0026#34;, \u0026#34;Poster\u0026#34;: \u0026#34;\u0026#34; } ] } Processing Steps Detection: DRMDTool either watches a folder or receives .drmd uploads through the web UI. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. Command Generation: Using the MPD, KID:key pairs, output paths, and subtitles, DRMDTool builds a command line for N_m3u8DL-RE. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a .drmd file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N_m3u8DL-RE. Files are saved in organized directories like Movies/Title or Series/Title/Season, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file.\nArchitecture Overview The configuration is handled via config.toml, with environment variable overrides for containerized or dynamic deployments. Once started, the tool can either monitor a specified folder or allow file uploads through the UI. Each .drmd file is parsed, grouped by series and season (if applicable), and processed sequentially with support for job pausing and resuming.\nWeb UI \u0026amp; CLI To use:\n./drmdtool Visit http://localhost:8080 for the web interface, which supports drag-and-drop uploads, selection of episodes or movies, and real-time progress tracking. For headless operation:\n./drmdtool -f /path/to/file.drmd Jobs can be paused, resumed, or aborted through the web interface, which reflects the backend state via live updates.\nEnhanced Download Logic DRMDTool dynamically builds download commands using metadata from .drmd files and user preferences. It ensures that only the highest quality streams are kept, removing ad periods and duplicate segments from the MPD files. Subtitles are fetched and embedded automatically. Jobs are tracked with robust state management and logs for debugging and visibility.\nRepository Code and setup instructions are hosted here: https://git.directme.in/Joren/DRMDTool\nDRMDtool For advanced usage details, customization, and API structure, refer to the README.md in the repository.\n","date":"May 21, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/project/project-1_hu_3db5ce4165d1b6f3.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"396\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/project\\/project-1_hu_7691192a371c30a3.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/project/project-1/","title":"DRMDTool Project"},{"categories":["cybersecurity","podcast","interview"],"contents":"In Red Team Talk nemen wij, Joren Schipman en Mattia Punjwani, studenten Cybersecurity aan Howest, jullie mee in een gesprek met Thomas Castronovo, ethical hacker en consultant bij Deloitte. Samen duiken we in de wereld van offensieve security, red teaming, en de realiteit van een carrière als pentester.\nVan Interesse tot Loopbaan Thomas deelt hoe zijn interesse in cybersecurity begon tijdens zijn opleiding, met hands-on projecten zoals het hacken van virtuele machines. Een stage bij Deloitte in 2019 zette hem op het pad naar een voltijdse functie binnen het Offensive Security Team. Vandaag werkt hij al drie jaar bij Deloitte België en specialiseert hij zich in offensieve testen.\nOffensive vs. Defensive Security Hoewel zijn hart bij offensieve security ligt, kreeg hij recent ook ervaring aan de defensieve kant. Het leverde hem een breder perspectief op: “Het geeft een heel ander zicht op hoe aanvallen eruitzien vanuit de andere kant.” Toch blijft het red team werk zijn voorkeur behouden.\nWat doet een pentester nu echt? Thomas legt uit hoe een typische pentest verloopt: van het ontvangen van de scope, over het scannen van het netwerk en het zoeken naar kwetsbaarheden, tot het rapporteren van bevindingen. Tools zoals Nessus, BloodHound en PingCastle worden ingezet, vaak gecombineerd met zelfgebouwde scripts die de output analyseren en structureren.\nKwetsbaarheden in Active Directory Een groot deel van zijn werk focust op Active Directory (AD), waar hij telkens weer dezelfde pijnpunten tegenkomt: legacy-instellingen, onvoldoende gepatchte systemen, en misconfiguraties die vaak pas worden rechtgezet na een echte aanval. Twee voorbeelden die hij aanhaalt:\nLLMNR/MDNS/NetBIOS poisoning om credentials te verkrijgen DNS wildcard records die leiden tot man-in-the-middle aanvallen Tools, Tips en Oefenen Voor wie zelf wil beginnen raadt hij aan om zelf een AD op te zetten en tools als PingCastle en BloodHound uit te proberen. De meeste kennis verwerf je volgens Thomas door zelf te oefenen, dingen stuk te maken, en vooral: blijven proberen.\nDe Praktijk vs. Certificaten Hoewel certificaten nuttig zijn (zoals WPT voor webapp testing), benadrukt Thomas dat de echte leerschool het werkveld is. “90% van wat ik weet, heb ik geleerd door het gewoon te doen,” zegt hij. Oefenen op Hack The Box, zelf een netwerk opzetten, en leren van collega’s zijn voor hem essentieel.\nAfsluiter De aflevering toont hoe breed het vakgebied offensive security is: van interne pentests tot phishingcampagnes, van legacy exploits tot zero-days. Maar vooral: het is een vak waar creativiteit en nieuwsgierigheid centraal staan.\n","date":"May 20, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-4_hu_8ddea2f052660626.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-4_hu_96cadc46e7508592.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-4/","title":"Red Team Talk: Een Blik Achter de Schermen bij Offensive Security"},{"categories":["cybersecurity","event"],"contents":"On a Mission with NATO: Cyber Defence on the Frontline Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO\u0026rsquo;s most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges.\nThe Exercise: Locked Shields Locked Shields is no ordinary simulation. It is a full-scale, live-fire cyber defence exercise involving more than 6,000 machines and a narrative scenario so detailed it includes geopolitics, disinformation and even fictional countries. This year, the Blue Team 03 (our team) defended a simulated nation’s critical infrastructure including power plants, satellites, 5G networks and banking systems, all while under constant attack from a coordinated Red Team using automated scripts and over 28,000 attacks across two days.\nAnd yes, every team (Red, Blue, Yellow, White) uses Ansible. For everything.\nHigh Stakes, Real Lessons What do you do when a rogue process might be malware, or maybe just a poorly named service? What happens when your teammate refuses to act unless something is “officially malicious”? The team faced cultural clashes, communication breakdowns and stress-testing of both systems and people.\nThe exercise required more than technical fixes. It demanded communication with simulated commanders, media and public stakeholders. Reporting became just as important as patching. It taught participants how to translate technical impact into real-world consequences. Not \u0026ldquo;port 8443 unreachable\u0026rdquo;, but \u0026ldquo;our air defence system is degraded, and we cannot fly planes\u0026rdquo;.\nThe Black Team: Rapid Response in Action A new but powerful presence in the simulation was the Black Team, a rapid-response unit deployed when problems became too complex for any single team. Acting like special forces, they jumped in when incidents crossed team boundaries or demanded unconventional solutions. Their mission was to find out what was happening, assess the impact and suggest fast, creative responses. Introduced just last year, this team quickly proved its value again in 2025. They even embraced the role with style “you can wear sunglasses inside” became their unofficial motto.\nTheir presence underlined a critical lesson: not every problem fits neatly within a team’s silo. Real-world defence requires flexibility, speed and lateral thinking.\nHighlights and Blooper Reel There were plenty of mishaps. Misfired scripts, team mix-ups, and one case where a DNS setup from a previous year was reused by mistake. Someone tried renaming cut to shutdown, breaking essential operations until it was fixed. Systems rebooted into chaos, a manual was uploaded to public GitHub, and the team had to quickly learn the difference between symbolic links and real binaries.\nHuman Factors and Growth From detecting malware with Velociraptor and Q9, to encountering teammates who took orders literally, the learning was intense. One participant noted that while Belgian and Luxembourg teams prioritized knowledge sharing, others preferred strict protocol. This highlighted cultural differences and the importance of interpersonal skills.\nThe biggest lesson? You are never fully prepared. Every iteration of Locked Shields is different. But each one sharpens not only your skills, but also your ability to function as a team under extreme conditions.\nFrom the Battlefield to the Classroom This experience directly impacts the classroom. Inspired by the exercise, Howest is introducing new hands-on courses. Students will be dropped into realistic broken networks, with misconfigurations, fake firewalls and simulated threats. It is chaos, but controlled. And that is the point.\nAs one speaker said: “You don’t win Locked Shields. You just survive it better than the rest.”\nFinal Thoughts The exercise teaches more than just cybersecurity. It builds trust. It proves that knowing your teammates can be as important as knowing the tools. Whether that comes from a shared flight or a pre-exercise barbecue, it all matters when the pressure hits.\nWant to see how cyber defence works in real life? This is it.\n","date":"May 13, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-1_hu_8def6289c64a2dc8.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-1_hu_d77be45b273e444.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-1/","title":"Cyber Defence on the Digital Frontline: A Mission with NATO"},{"categories":["cybersecurity","CTF","education"],"contents":"On March 14 and 15, I joined the Cyber Security Challenge Belgium qualifiers with three teammates. For two days, we threw ourselves at CTF challenges covering binary exploitation, Android reversing, cryptography, and more.\nWhat follows is a recap of the challenges I personally worked on, some I solved, some I didn’t, but all of them left me with new skills and new ideas.\nA Buffer Overflow to Warm Up One of the first challenges I picked involved a binary with a basic stack overflow. I used standard techniques, finding the offset, hijacking the return address, and injecting shellcode. Tools like pwntools helped automate the payload crafting. It was a great warm-up and a confidence boost once it worked.\nBinary Exploitation Flag\rOurEncIsSec: Zip Bombs and OEIS Then there was a more elaborate cryptography challenge: 18 zip files, each password-protected. We cracked the first three passwords using John the Ripper and got numeric values from them. I searched the sequence in OEIS and found it matched A007408, which gave us the full pattern of passwords.\nUsing this, I could extract all zip contents automatically, reconstruct the password-protected message, and finally reveal the flag.\nPicture of the solution\rInfinite Luck: One in a Million? One challenge involved “guessing” a thousand random numbers between 1 and 10. The banner claimed it required infinite luck, but of course, the randomness was seeded. After inspecting the generator, I realized it was deterministic. By precomputing seeds and output sequences, I could match the challenge’s banner to a specific seed and regenerate the entire solution.\nChallange picture\rCorrect number order\rAndroid Reversing: FRIDA and JADX Several APKs were part of the qualifier set. I used JADX to decompile them and FRIDA to patch logic at runtime. In one challenge, I bypassed license validation by forcing key methods to return true and unlocking hidden functionality.\nThe Challenge That Stuck with Me: Rebuilding a Split DEX This one stood out.\nThe app used a 4×8 button grid. Pressing buttons loaded a sequence of blockXX files from assets. These were concatenated in-memory and passed into InMemoryDexClassLoader to load a class called be.dauntless.flag.Flag.\nClass loadClass = new InMemoryDexClassLoader(ByteBuffer.wrap(byteArrayOutputStream.toByteArray()), getClassLoader()) .loadClass(\u0026#34;be.dauntless.flag.Flag\u0026#34;); Each block was a fragment of a DEX file, but the app didn’t tell you the right order. I tried manually inspecting the fragments, identifying methods, string constants, and offsets, to infer how to reassemble the full file. I got close, but didn’t crack it in time.\nThat challenge stuck with me because it combined static analysis, runtime introspection, and logic reconstruction. It wasn’t just technical, it was creative.\nThe One That Got Away: TLS Fingerprinting Another challenge involved a Go-based TLS server that rejected all client connections unless they matched a specific fingerprint. I used Go’s tls.Config to replicate the version, cipher suites, and ALPN:\ntls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_128_GCM_SHA256, // ... }, NextProtos: []string{\u0026#34;h2\u0026#34;}, } Despite that, the server still refused the connection. I suspect it was using JA4 or similar TLS fingerprinting techniques we couldn’t fully emulate. We had to move on, but I’d love to revisit that one someday.\nFinal Thoughts I didn’t solve everything. But that wasn’t the point. Every challenge was a practical puzzle, something to decode, reverse, bypass, or just understand a little better.\nWorking as a team with Evarist, Nathan, and Waut made it even more valuable. We bounced ideas off each other, divided tasks, and got a much broader set of challenges covered.\nThe Cyber Security Challenge Belgium qualifiers weren’t easy. But they were the best kind of difficult, the kind that teaches you something whether you solve the problem or not.\n","date":"March 15, 2025","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/post-2/binexpl_hu_3d36b409c72f3586.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"160\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/post-2\\/binexpl_hu_afca672637b6b98d.png';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-2/","title":"Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience"},{"categories":["cybersecurity","event","defense"],"contents":"On November 12, we had the opportunity to attend a Tech\u0026amp;Meet session unlike any other. The speaker was Colonel Gunther Godefridis, Director for Development \u0026amp; Readiness at Belgian Cyber Command, and the topic: safeguarding our country in the digital domain.\nHeld at Howest Campus Brugge Station, the event drew students, researchers, and professionals eager to understand how military-grade cybersecurity operations are run, and why they matter more than ever.\nDefending in the Digital Age Colonel Godefridis began by outlining the core mission of Belgian Cyber Command: protecting Defense’s networks and weapon systems, supporting intelligence operations (ADIV), and conducting defensive and offensive operations in cyberspace. In short, Cyber Command isn’t just watching traffic, it’s actively shaping Belgium’s digital resilience.\nWith society’s increasing reliance on digital infrastructure, the risks of espionage, disinformation, and attacks on critical systems are no longer theoretical. Godefridis highlighted the urgency of being able to respond to, not just detect, those threats.\nWorking Together: Academia, Industry, Government One theme that stood out was collaboration. Cyber Command doesn’t operate in a vacuum. It works closely with national agencies, NATO partners, academic institutions, and the private sector. The colonel emphasized that defending cyberspace requires broad cooperation, and Belgium’s approach is to engage across domains, military, civil, and industrial.\nHe also made it clear that this isn’t just about defense systems or classified data. As the line between civil and military digital infrastructure blurs, vulnerabilities in civilian systems can become national security issues. That’s where cooperation becomes essential.\nLeading with Innovation With over 20 years in military service, Colonel Godefridis brings a unique perspective. From artillery innovation to defense technology strategy, and now to cyber development, his background reflects the evolving nature of conflict and the military\u0026rsquo;s response.\nHe discussed how innovation, including artificial intelligence, is becoming central to cyber defense. Cyber Command is investing in tools and skills to automate threat detection, analyze large datasets, and simulate attack scenarios. It’s not just about building walls, it’s about staying several moves ahead.\nA Transparent, Human Conversation The Q\u0026amp;A session at the end made the evening especially memorable. Questions ranged from technical details of cyber defense capabilities to the human side of cyber careers: how people are trained, what skills are valued, and how students might contribute.\nColonel Godefridis was honest about the challenges. Cyber operations evolve quickly, and so do adversaries. But he was equally clear about the opportunity: Belgium is building a capability that matters, and it needs talent.\nFinal Thoughts If you walked into this talk expecting a dry presentation on military infrastructure, you were wrong. This session was a deep, realistic, and engaging look into how Belgium is preparing for cyber conflict, and how students like us could be a part of that mission.\nWhether you’re in cybersecurity, software development, or systems engineering, there’s a growing role to play. And as Colonel Godefridis made clear: it’s not just a job. It’s part of defending a society that’s more vulnerable, and more connected, than ever before.\nTip\nWant to learn more about Cyber Command? Visit the official website at mil.be\n","date":"November 12, 2024","image":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n \n\n \n \n \n \n \n\n\n \n \n\n\n \n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n \n\n\n \n \n\n\n \u003cimg\n \n src=\"/images/blog/blog-3_hu_fdd9e13d0370b160.webp\" loading=\"lazy\"\n decoding=\"async\"\n \n\n alt=\"\"\n class=\" img\"\n width=\"650\"\n height=\"433\"\n onerror=\"this.onerror='null';\n this.src='\\/images\\/blog\\/blog-3_hu_c932299ff2fa7067.jpg';\" /\u003e\n\n \n \n \n \n \n \n\n\n \n\n","permalink":"/blog/post-3/","title":"Securing Cyberspace: Belgian Cyber Command at Howest"}] \ No newline at end of file diff --git a/public/index.xml b/public/index.xml index 5b9e8b9..6108e60 100644 --- a/public/index.xml +++ b/public/index.xml @@ -41,7 +41,7 @@ http://localhost:1313/blog/post-9/ Fri, 30 May 2025 00:00:00 +0000 http://localhost:1313/blog/post-9/ - <p>In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001—a watch that combines classic design, reliable mechanics, and exceptional value.</p> + <p>In the world of horology, the Japanese Domestic Market (JDM) often hides treasures that fly under the radar. One such gem is the Seiko SARV001, a watch that combines classic design, reliable mechanics, and exceptional value.</p> Silent Interception: Exploiting LLMNR, NBT-NS, mDNS and IPv6 in Modern Networks @@ -55,7 +55,7 @@ http://localhost:1313/blog/post-10/ Fri, 30 May 2025 00:00:00 +0000 http://localhost:1313/blog/post-10/ - <h1 id="the-smart-home-trap-isolate-or-be-owned">The Smart Home Trap: Isolate or Be Owned</h1> <p>Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you&rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.</p> + <p>Smart homes are convenient. But with convenience comes risk. If your doorbell runs Linux, talks to Chinese cloud servers, and sits on the same network as your work laptop, you&rsquo;ve got a problem. The fix? Segmentation. This post explores how to use VLANs and firewall rules to quarantine IoT devices and minimize lateral movement, even on a home budget.</p> Building My Hugo Website on a VPS diff --git a/public/project/index.html b/public/project/index.html index 062479f..378738d 100644 --- a/public/project/index.html +++ b/public/project/index.html @@ -1,7 +1,7 @@ - + Recent Projects @@ -70,6 +70,7 @@ + @@ -155,8 +156,8 @@ - - + + @@ -183,7 +184,7 @@ - + @@ -265,9 +266,12 @@ + + - + + @@ -277,6 +281,9 @@ + + + + + + +
+
+ +
+
+
+
+ +
+

Lean and Local: DNS, VPN, IRC and Ad Blocking

+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lean and Local: DNS, VPN, IRC and Ad Blocking + + + + + + + + + + + +
+ + +
+

Running a full-featured network stack on old hardware isn’t just possible, it’s efficient. This post covers how I configured Alpine Linux as a diskless system hosting DNS resolution, ad blocking, VPN access, and a local IRC server.

+
+

Why Diskless?

+

The system boots entirely from RAM using Alpine’s diskless mode. This eliminates wear on flash storage, improves startup speed, and ensures a clean slate on each reboot. Changes are persisted manually using lbu, making the setup both robust and disposable, perfect for low-power hardware with limited write endurance.

+
+

Base Setup

+

The machine is an old D-Class thin client with 4 GB RAM and an AMD G-T48E CPU. Alpine Linux 3.21 is installed with only essential packages (229 total). Services are configured via OpenRC and restored from compressed overlays on boot.

+
+

DNS and Ad Blocking: Blocky

+

Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and deny lists per client.

+

Highlights:

+
    +
  • Local resolution for custom domains like directme.in
  • +
  • Cloudflare, Google as upstream resolvers
  • +
  • Per-IP blocking rules
  • +
  • Prometheus metrics for monitoring
  • +
+

Example config:

+
blocking:
+  denylists:
+    ads:
+      - https://big.oisd.nl/domainswild
+    vtm:
+      - /home/joren/dns/vtmgo.txt
+  clientGroupsBlock:
+    default:
+      - ads
+    192.168.178.123:
+      - vtm
+

+

VPN: WireGuard via PiVPN

+

WireGuard provides encrypted access to the local network, and PiVPN makes managing it trivial. While WireGuard itself is minimal, PiVPN adds essential automation without requiring a full control panel or web UI.

+

Key benefits in this setup:

+
    +
  • +

    Client management is simple and scriptable. Adding, disabling, or revoking peers takes seconds:

    +
    pivpn -a  # add client
    +pivpn -r  # remove client
    +pivpn -off <name>  # temporarily disable
    +
  • +
  • +

    Mobile-friendly. Each config can be exported as a QR code with pivpn -qr, which is perfect for importing into the WireGuard mobile app.

    +
  • +
  • +

    Monitoring support. View live connections with pivpn -c, or audit all issued keys with pivpn -l.

    +
  • +
  • +

    Backups included. One command backs up all configs: pivpn -bk.

    +
  • +
+

Example output:

+
::: Connected Clients List :::
+Name     Remote IP           Virtual IP     Bytes Received     Bytes Sent     Last Seen
+Phone    84.199.x.x:60042    10.60.150.2     439MiB             3.3GiB         May 29 2025 - 22:39:56
+

In this context, PiVPN reduces the friction of managing WireGuard while remaining fully compatible with Alpine’s diskless, CLI-centric philosophy. No services are wasted, and all changes remain under user control.

+
+
+

IRC: ngIRCd

+

For real-time messaging, I run a public-facing ngIRCd instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, ngIRCd is stable, portable, and well-suited for both LAN and internet-facing deployments.

+

The server is configured to:

+
    +
  • Autojoin clients to a default #General channel
  • +
  • Support cloaking for user privacy
  • +
  • Restrict joins per user/IP to prevent abuse
  • +
  • Provide operator access with predefined credentials
  • +
  • Disable DNS and Ident lookups for speed and reduced leakage
  • +
+

Here’s a snapshot of the active configuration:

+
[Global]
+Name = irc.alpine4071
+Info = RAM-only IRC Server
+Listen = 0.0.0.0
+Ports = 6667
+MotdPhrase = "Welcome to our RAM-only IRC server!"
+AdminInfo1 = IRC Server
+AdminInfo2 = Anywhere On Earth
+AdminEMail = admin@irc.alpine4071
+
+[SSL]
+CertFile = /home/joren/certs/fullchain1.pem
+KeyFile = /home/joren/certs/privkey1.pem
+Ports = 6697, 6698
+

Authentication and moderation are handled via the [Operator] block, and all users are dropped into a predefined channel:

+
[Channel]
+Name = #General
+Topic = General Channel
+Autojoin = yes
+

Why ngIRCd?

+
    +
  • It works well on memory-constrained systems.
  • +
  • It doesn’t require database backends or scripting engines.
  • +
  • It supports modern essentials like TLS, cloaking, and structured limits.
  • +
  • It’s simple to secure and configure, even when exposed to the open internet.
  • +
+

This makes ngIRCd a perfect fit for remote support, small private networks, or just having your own IRC node to tinker with, without touching a gigabyte of storage.

+

You can connect today via:

+
irc://alpine-4071.duckdns.org:6667   (plaintext)
+ircs://alpine-4071.duckdns.org:6697  (TLS)
+

+

Making It Stick: LBU

+

To persist changes in a stateless system, I use Alpine’s lbu:

+
lbu include /etc/blocky/config.yml
+lbu include /etc/ngircd/ngircd.conf
+lbu commit -d
+

This updates the overlay that Alpine loads at each boot. All runtime data stays in RAM.

+
+

Runlevel Integration

+

All services are enabled through OpenRC:

+
rc-update add blocky default
+rc-update add wg-quick default
+rc-update add ngircd default
+rc-update add iptables default
+

Boot time is under 10 seconds, with full network stack active by the time DHCP finishes.

+
+

Final Thoughts

+

Alpine’s diskless approach is perfect for resilient, low-maintenance edge systems. Combined with fast tools like Blocky and WireGuard, even minimal hardware becomes a capable, efficient network node, quietly resolving DNS, filtering traffic, handling VPN access, and hosting IRC.

+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/sitemap.xml b/public/sitemap.xml index 8a25044..ccab998 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -2,66 +2,126 @@ - http://localhost:1313/categories/ + https://joren.blog/categories/alpine-linux/ 2025-05-30T00:00:00+00:00 - http://localhost:1313/categories/cybersecurity/ + https://joren.blog/categories/ 2025-05-30T00:00:00+00:00 - http://localhost:1313/ + https://joren.blog/blog/post-8/ 2025-05-30T00:00:00+00:00 - http://localhost:1313/categories/network/ + https://joren.blog/categories/communication/ 2025-05-30T00:00:00+00:00 - http://localhost:1313/categories/offensive/ + https://joren.blog/categories/cybersecurity/ 2025-05-30T00:00:00+00:00 - http://localhost:1313/blog/ + https://joren.blog/categories/decentralization/ 2025-05-30T00:00:00+00:00 - http://localhost:1313/blog/post-5/ + https://joren.blog/categories/dns/ 2025-05-30T00:00:00+00:00 - http://localhost:1313/project/project-2/ + https://joren.blog/categories/hardware/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/iot/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/jdm/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/blog/post-7/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/project/project-3/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/blog/post-6/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/network/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/networking/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/offensive/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/blog/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/project/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/reverse-engineering/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/seiko/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/blog/post-9/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/self-hosting/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/blog/post-5/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/blog/post-10/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/vpn/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/watches/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/categories/windows/ + 2025-05-30T00:00:00+00:00 + + https://joren.blog/project/project-2/ 2025-05-29T00:00:00+00:00 - http://localhost:1313/project/ - 2025-05-29T00:00:00+00:00 - - http://localhost:1313/project/project-1/ + https://joren.blog/project/project-1/ 2025-05-21T00:00:00+00:00 - http://localhost:1313/categories/interview/ + https://joren.blog/categories/interview/ 2025-05-20T00:00:00+00:00 - http://localhost:1313/categories/podcast/ + https://joren.blog/categories/podcast/ 2025-05-20T00:00:00+00:00 - http://localhost:1313/blog/post-4/ + https://joren.blog/blog/post-4/ 2025-05-20T00:00:00+00:00 - http://localhost:1313/blog/post-1/ + https://joren.blog/blog/post-1/ 2025-05-13T00:00:00+00:00 - http://localhost:1313/categories/event/ + https://joren.blog/categories/event/ 2025-05-13T00:00:00+00:00 - http://localhost:1313/categories/ctf/ + https://joren.blog/categories/ctf/ 2025-03-15T00:00:00+00:00 - http://localhost:1313/categories/education/ + https://joren.blog/categories/education/ 2025-03-15T00:00:00+00:00 - http://localhost:1313/blog/post-2/ + https://joren.blog/blog/post-2/ 2025-03-15T00:00:00+00:00 - http://localhost:1313/categories/defense/ + https://joren.blog/categories/defense/ 2024-11-12T00:00:00+00:00 - http://localhost:1313/blog/post-3/ + https://joren.blog/blog/post-3/ 2024-11-12T00:00:00+00:00 - http://localhost:1313/tags/ + https://joren.blog/tags/ diff --git a/public/tags/index.html b/public/tags/index.html index e003df3..b542a65 100644 --- a/public/tags/index.html +++ b/public/tags/index.html @@ -1,2 +1,2 @@ - + diff --git a/public/tags/index.xml b/public/tags/index.xml index 37bd219..5feb1c2 100644 --- a/public/tags/index.xml +++ b/public/tags/index.xml @@ -2,10 +2,10 @@ Tags on Joren's Site - http://localhost:1313/tags/ + https://joren.blog/tags/ Recent content in Tags on Joren's Site Hugo en - + diff --git a/resources/_gen/images/images/blog/blog-5_hu_2496163d8ca0be9a.jpg b/resources/_gen/images/images/blog/blog-5_hu_2496163d8ca0be9a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a5abde23f33b70659e1e81c048793ed557c7c55 GIT binary patch literal 33768 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-5_hu_3b13dd258d8e8ef1.webp b/resources/_gen/images/images/blog/blog-5_hu_3b13dd258d8e8ef1.webp new file mode 100644 index 0000000000000000000000000000000000000000..0cfeea76e5a5538c81ddc3955d9b5f64e818d5a4 GIT binary patch literal 82 zcmWIYbaV4!U|%>R3jSI&KD$~w<$eKBHvr9Z9QObK literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-5_hu_3f20fe629de38114.webp b/resources/_gen/images/images/blog/blog-5_hu_3f20fe629de38114.webp new file mode 100644 index 0000000000000000000000000000000000000000..25cd0b3a2339e352046825b154eb255b81422223 GIT binary patch literal 15576 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-5_hu_c9dc7523d07b861b.jpg b/resources/_gen/images/images/blog/blog-5_hu_c9dc7523d07b861b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12ed067aa979cbbbbb5a9692a4ed1d21e5b10380 GIT binary patch literal 660 zcmex=nAuRebI z{N?Mn?>~P2Vq{>3cn3&AJcQ&QL7;z_SXh`@*g^hbWGV+@WL#ZV5Lu0|>=E#>TDn7BMYYOP7jvw4R_Xl|%l(pDAiecSxlPPOG9pwMt1OVbf+8F=< literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-5_hu_cb27be9aee0182b2.webp b/resources/_gen/images/images/blog/blog-5_hu_cb27be9aee0182b2.webp new file mode 100644 index 0000000000000000000000000000000000000000..c7491bc8f5f371e33aaf909d277446dd51f5a2c8 GIT binary patch literal 138 zcmV;50CoRTNk&G300012MM6+kP&goV0001x1pu7^DkuOI06$rbuS=;Uq8JTTRFf5i z^nd^#aG5RZ3~f{U@@fwl8a!GJ_5fGuf)%5H0RGsH#9JUfATV=q6;1V+X~{VA(NR3l sp?Bo;TphW+zET)=<}LEZll%Z6bBnp@J??0oCfi`@hkNW<*uVe)00Or-mH+?% literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-5_hu_e31b752cd8166a9a.webp b/resources/_gen/images/images/blog/blog-5_hu_e31b752cd8166a9a.webp new file mode 100644 index 0000000000000000000000000000000000000000..c9d362a3603d1d823ad7e5bf2b75138221001fbf GIT binary patch literal 19296 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 T2mlD!c3Z@7nC_GafB*mhb`y8L literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-5_hu_e4f7343564430a7c.webp b/resources/_gen/images/images/blog/blog-5_hu_e4f7343564430a7c.webp new file mode 100644 index 0000000000000000000000000000000000000000..df7e93303848f6ba032e9b98a4f78ff777fce3f3 GIT binary patch literal 20242 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%0AKRq6+L__(xBmuJ^9EqghR8DkE>PHTp=oxx zpS^zP#sDTdL#Yk@mt=|1o*fv7(Z}c@%8CS@^u=?t%z zldHDo8vS`YA&L(#*702V@Sy_&e6u%pz{g1$u*L$kP!}L#5SKiQyFa}nMw17VM<}ex z>P3Ex$ery_;?nHTyG2q(ehk^gwkG3bjc%=f6ZCU3iWU<~GyASJfe)ewQ*(v)ayT zOqTKJn$wgRT)a=p+Kw}dkR=dL`kTh-6XcEef{HH=YK{e=<^ff{x@aKX&1P?rB;)jd zVhtO57R4x|1PoO>c=bHNy#d&N`D)V76`zDtiaRF@*(b|Bjn6_Rm2*R2+1Ajq_lifa z8G6T_CT4i%aH<4JsgO!uZGaAj+=?q*9xmrMRyH!hZ_sHivsvf zGX)+}1D?wJ#vean%-C$xJ}83Opiz6Ll~m<4S)SMf`~5^uy2x1KV_sfL2~QIUvhvVB z@v~CcnfkiBkS}sc-9v?_CzjEDOD4e`n9wPe`SlcIg--7p?J(|DN1Azr2^88j9GTb< zWv0-K_Sbwn$EoHG=oCf;eD+RiZh60dFDoVoKH)+`!(eAS)yax3rj>Rr z2r7}?w1-i10&`I<1b5?Oi)dAOlX|PBDP5DfRhF`asHqD~$IQ|G--y6)|GIWda>61$ z&fSQ-T>YqPcq7ZLlxRum`W*eZFaIGJH@EoJm{0ric@|heOgz*}RS4j|ngCje1RWzJ zTTJxwc$(hkNHHXgo5O~AH`)gP+v2Dnk0bL?kAr>SWkX)l^Y_gE|2_Ni8#&xLW`gD1 z+MG2&amJo*>;bh5d7ig2F461)8AV2jLp~eX5oL*Yh#BrVDBycsH@Ps}0t0Z+7aZ~{ zv|l-&6H89ye+nzO>t92hf}WKH3iai<$}R(iEzy45FJS18i1Rt4Us0Rrs%sL6hG$7D zka#OcODOMf$y=ueJKh~a8;9AlQu_fQH6<&gKPmxG4h%NSyQ%%zJa1KTkrB9z9|`il z=R1hOa8ZKbh{kOUnw?weODZ|-P)A6%b`Y`U!|w!?owiTzbz7~Vc$t>HiJN#6Vo`PC z&x!i)sQ}727kKRcd;6eTRrv1B1P3HRBb&>=SbxL=Tu9SG6G!LZbuueBkgE$L zAQ?wHhkf4u&2rv9minIQ#_z|<>H@D3hl_8Q0}B^Ni}+g}peDX9)_v;=piDn)UFu#x~}|z7&ZdQRa?1*K3xb*6`U33mXfs#nJJU6@8#SEDzl4~ z>r+h-BzVoM04^D!-;rXsCateL?Jwl%bcfm>aDSTbVpbPUe|iWq(unr1W31 zQhY{V^58p)><1nPKppT`!WEN3Iu>emWrgHH%&7D%8mxusicGEfQtp{9Nn5rs4vmYv zJtSD{P4F)&E^*l#xC(PfiC($Gd`0$dbv%41(!85je)a_d3(8qtX~5$D?xhGB_1=L} zaFZ-Xyxgv;DJml&q_H3wo{Kw+i7d{ajzKxG1p28O4;ao2FIxl<9F2bkEHWegYBwwC dLhFY#)}P$ToYDmB03^76A-Vln00kl?008Kw|%b z1S`x)L{X9|Jfgb(=44=dX# zbw-gag3nz-ZV*sW)6mkfvfX3n;1m)T5fu}ckbk70sHCi-s;l=zA8KG|Wbwk%%G$=( z&ehG`!_&*#=k=S=u<*ALk%>vkDXD4i-lyl~7Zes1my~||QdM13TUX!E_^qR}tGlPS zuYYWOVsdKw$4@w7X?bOJZGB^N3$=f6cyxS%K0U(#u>KSW{QIXsf0Ks{lm`%h_p5VYD!^XM8k4yeQ8}FI(t-Auj_!JKlK2)~fU>4LtQa*PXC7@yvLa?HKi}Z&? z|2=_1{znr1OQ3(ra}5WGurNTtu*d*e;PhGRkr0;7t1*NUZVONIogzjN_#*$?r$W(t z-TZ^rI(fk}Z`w7rQGXb_i+=*Lj`tDF35)>7IC7@@p$Zu7(sB}Z@U z#Oju6ohG4JV;$X#-1&>j`}og!p$95`+WYM~(=$40do&O9Sd z{3-d|(!P4r?C42hh4*^6AFuoSU1n-bJ{C+Bll4sK0}%FE)HQGm=Nf3UzOaAW(2!2} z-tWDcjON^PLDRa9B&i*q$?s#;$_1ChJH60BINgMw&rx4OyeG+0Q+9( zD=e{3Sw^ETg}E}GBtQP#Ah&4YAvs+Pzm1IRuq}M|vSmW_8;N{n&@(e%L>AS0r_VQd zd#cCjkIZZV0efrgPpNBmzO7**((EvI$ju9gokGgaevERo12y)GOIgl?I3_Peb0Rxi zdeW)=oVm|KBru^uMePYngSrv&|-Y3L4SM zv`OyeqORL<%e%6ZP|`cJ{p*VEG5P0~FH+gxe!_SWb#Z(B2&IWk{e@^LE^kD{&T=zL z^@fS1^T<+TTNs^ZXa%;**1@|Y>@2^+gW45TtW3>j8@byxKsaw|BpOk?pJnlk^uXhV z^@SbcftYC$XSqht_m0w&T%t^jB%^tbaLu}DUW?HM|Hy>Z+MS=v+4j1K)<}5I+no;H zZ7)+ZGYMXM99+0!g?>zrS9p7Qo{dQQo0E@YvkrHO-`&1Ht2DNQXXz6^V!XBwKHZf%b!6q8< zP1F0uH$;oNZ)N5s?Y_!pL+h5<9BVo|xE_z>v#|IEmV4LYi%Bu19C~*2)({JRgIae! zSDvLwn zyl#h(RQr3jtCS4Ah(&cg`~K#3hee@D9oioeWAtr}k#0l1w6i$$-DkWa=cA$$k&2tu z`r#3y(b-)2V^VzXCFmk`CjRpu1zdO9yD{2@w=56~uXk#HnwhgtRL11F2m~bOD?Vm4 z=tL$A`$+h6eL^j~u|jrNB#09`aa_(2EyfD=olWPdA=f)z*`(H;2uR(C8GFxmn=E#M zQ=nd=QguE2K#q3PtZo?+4%d@mq{|7nT%cQNq9u&RNHSO;k|KsgklPO&&sdOg{&-$2 z?V3|~Gdf9G`jdkzRyz}|6NNqD^SZkWoP%o=b0gM;Pf%8G{iG{qH_Pv5c0|{kHuMgw zo@nBsp^wJ>ROD(_rSv1I@P*FV1>8&j+}ky)Wd%gZ!FG%1aiSeLLy+ z@?c4PTS?n&N{V>#@~+q-3TI!*?<y6W`Sj9i9f(&42U$`Nk=qMp07?wJ!}8{S}HHhC_Ow&OC@P=C%xx(QuqIlo^O z+?RS^z?-HUPZg!BjGY(B4ir)(=LPZDPPr`1ci020g|C{4j>HDt+sLJETm$&}t1trK$gpkycrLZonUn;o`Pe>FP( z;x2BKTv^k1P6S)&s9fgpLlWEU`%C;O3R1Q55-a6Cl zAi?cI4h?tFjSrGq#(n?3>X}OW?L2z|<6u}-^IJ>*^4DxqRA8u+FiALS&UoJFOL)ju zApZ}BL^-A)C@~WDH3>c5`Eb~!$M)7veaaV1BBlbjO*sbf&9S&be`?!BSg1rr;bmyi z>`-G<4yU-;0e^MYeLS=7<}yR1g^fAs&LPjETSRpj4|Eha2A-1IU`1@%;`mc8%Z4wI zNKwIGoQ*UkO4iF?rb}k3s))@EKQoEzG6y#4ti!8^$-LAv&N+7l@2Ifw_TKo4eV9wa z3?y}Vm=jBp-HX}VbI5NomUkjePK^uLb&kzzyaqzeZ&qiib<_p0qM}>%V@Po@do8Rx zNMHH*K+7)JkteU4FO9X4>V1ImPU4N?0~P{$*ho5Xs`R8zm#A(zDr1NtCz^ADDXhqXWAYag-DHBhG1<&rz=Jl zW;*F;jdUtYXB7=@=3@p)JwA^VJA+ow+vX6Im#x$)>CkOn(Qi!oTm#Y7my+5y9jv(-m>r}zq;0U?_s|Gsi3uNS z#z;{jd%m6_$7`xv>r*C`m3cou?;SFhj(H_ZErsKRu&$b@4nL@ttdYNk%PlXE%4s}7 zq=lD$?w-$p>hc+my&%l{c_A{^tb#atw`cIYk>}1+R?EIKJqUI)VG+7Q{o%Ped7!0X zJ|6q(&C541S#3Ec!;!N{VuRNE^rgffB|37F`TIVu1(7GaofH&O0L`xHdoQmTRa}wt z+g&+uf>KP!bJ?`M)7r~l(>UGso7X^?k$No*Np-xS)et%Lz57v>>dX_xtF<7Rr#(`K z1&%d`bQdy6l86iOj}Y8}`%~P{4)9agy(}_`F!s`sT-(-F&Dn4h?*wthv)7S8NF;kM z=Ko^cNDesiFPrc)wm z)-RAY&Tn`oLsITGz;2>LOa-+Bt=ZSt@mef@t#UOnz3v*#MW|(Dd~dQEkE8B6XC!JhWUTiB}kvoyxJJWgCX5Sq+ncZfDXjUrgD>J7p5Z8{+AF=wF?vm(W z)GgLHv4L3C5L|Qdlne}etP$~%VLj(Eema}VsrDeJ#q?fqv;582G}76)+5VsRu#dY8 zr(w+A-aM(o z<8%!m*u$RK(%oI$rR|4JU+g!}VWh^oe zrKW~sYGxSqxty(;D-~|<>PSvC$8IdeauQ_e&1Hzwhz{H~$yWEVw>7c~FP0a+1~NFD zv+w&_w|M&r(9GVK<{B~XY}79;>Z1DiJyB7NAhhLUSyz)G&8l!|yUHNk%v#>w+13?d zd{P-R2I1*u09+$`(Qf!7!o=@~lp!aB3e=H8Z>#B>#17~MzLe;Ry^O}RGY=a(^GA}t{om#SWMO@RX!d(xuaK4|_ZovS-x zr0x)K^~}5m%C2gUj*GhOf~Di_U>P@nkpE7L{vbk2{#m+pGLc?zw+DzWZCR2NV=Z_AI^@6>*=va#sC zp(FXcwv?JJe`No2$|hn`wQh3rB=b$hFf+e6%T#PciM{V?=DlA1UKO~^64UGqlxCpHV%Rku#VRf(KsM}p&l3fGe6vR*c7Fba^8eHG^ z*z7Y(iygm+yB^&WE=EXu1d`Zo`Z{!2*!xx}+94$Mn%ML%2bcr9V|>9!Al^M(hXp%& z{_GrH=N;399<6+hvF5o}M|w!182Y5$Q-}5P=wsF+OxG3u_Oq)e>oPK^m#v(WWM{^m zfo}Oy)-a>F`tGy&H9MXe^*C*G1)B^;<$cE=%%`Z$YWI%|gb6(z#E(rJ$(AgJN1!T8 zS!M$&$f@_2rI?zQ5^qvWRTkN$ah#dB&{6qHh)tnkqDPdhIu)(Pw}Dt^BT1$Cqzy}J z*8Viz!Rna&E{_cUx*e6c^9^Wzz^L3cU~9|Z7JLmHa_-v`CfS!5&${y~!{R;+`l>I) zUNFMoa`Shi+{f7XR|Fl7aT_*UZE9R?iwfQ&zP?z5mU~$VAz>Zc<*Me1$ERlO2krD4 z503Usd<|{W7h-j$m7Y<)8Ggg^vYYxIOe3WR^HQneoJ78R45|rArXnjgvN_ z>K&?iTjC2sQaAp1+}ZW?kGEEvUQC4xC;ULCu9?$Z$ejB}kM+2a-lA{_l@)!(CAkR1 zIMis!dSUMMm=!gchqelT8R6O85%y*C(JBhh%dy-tBCkX$}-uH^NhFeSWjyu*+{Y$Ld~B=@ z|B_Pe*2bF@W1dx#JEGlZxNXJ8oA8~2kQMfatJJ_bxqS{gVKGXb?{S>o*gencXK6%V zPXG%{*w5{2fMhL%t))tNmjbiP;m699b*C)-kF9hQBaLuUV;pS%vHBIJa8#a-PG|xMHbkC$N!6|Rdqvm{h@Ns@rjh|1h zXY=_kpbe@02Ag&Q*#yU##g0D>(sx0P0wW8jZiS~STGL9?tVA9`(3;KE?sv`S;iVID z_hjT5ZtWR%+o|>)@g;Q4Pmfsl$hBFFb~gFVmB)R5k`tjLa3Ng{S0*ZeoUb+a^tAFO zb)J2Dd|~`B&?8^!reOOSRD0Q+&gQJ{jl(DIqLd0!hOp@1aYozoM>7-RbZYV?BR2xy zP!~3Q16e+IJb+eYA*?a&ry{-mZcj!3+F=}>%~Tr+uUmvwvYABv6SBk`T)~5ue)mz; zOiYnWJ-XLG+>I~B1O_Y77Fh5&yNa3(&8n2_EOox%#5vIj2J&-!htr`OGu`$c-<3dK z=w9p#IW=uN>EcaVUcj?C%V(4zqx_Uxoybi@!|>GEgd{>rKfGsrJ6*6c?sm5_XTUBA z#pyCdP5r4Q+pkYPX>oq?2!BcAL`El#hV*s29RBC}x;+f(Yf|pZgY-toMneO*8E2Va z49in?N#|H%b0$r_OY3oElwJR%!C26W@FHGkCn3ODHM|E5$ z^-;FR^I!|^o4SljE#BQ91T=lQ6ZWHBxag9a$rVSUbYC7j1uqZ@GkP2-PbcY*O%18g z`sdA%uw2Yi)nv5GzLRD$#uCay&K_ctwED$4bvf8v%8vmRmVuDWm}${i zdy##=XoTA`Y}eC8!o8ePa0xfZVv*5oly_ZXD0e*nHEnnIOW2@EcaJE_Uan=NS>3I! zF)QT+{z4RhtFN&Wsq{?M>*@?kRn^-T@c!7cW0t$25u^6`33lZMjz~>2kE<=nxSAz# zhk7sj_Sd6*v~X^euho6crjAbNKI&pEZ8r|Q|nOxAY1pq} zG$h~k(7@+ZjrTo-5mbXFRMNI!zHSQZb|M#zka7)Vc}bi}E?^uysi({b z5iFYp_$Q!>d!}T_(^SI_9*(<{ZnQ~H)+dDbl3=GV1@IYnEa!x!wz457zO*}G?bKK5 z*0R9gTj2}F)(<+%LM~kMyoUV6t7%u?Kh=VKe_JG@C3!v}i|glKv?1XE1LFciYK4|M zudk2z!k-Jgk`4uY@V+|zNpgf^0#H*luXn;)z_mjWf2 z<7xAHmLu1taF)*@1ol4V2@#Hd!rm-FN_TS_XK~?@OO3XCGQ_y{B}EOknzGg+Jf9&N z$rzm%Pf(Vrm8gg3of72z3CbJ&EC3UwlEsc$u={cjaPh$2>%!F5-@dewTiw-`!A^{Z z){5njawR>sFkfw1sipQys8Gma)T=kQX?iqT?8nCr7H8ME-mf==JppPO4JscxZ$|sw{YAD|64^Xv7w+H7Byxj2Lj8DmHRxkD`>uK5>8=9*gCuF)sM%c-G|hD zio569kPUt;O7rKewby{@Pw}$UY;Lq#prLg&Tefl3R@(>J}wKetpmCzF0l%fw5@e;`PWz+b zo7I%zjF(7K({D_Zee%43{!KD{APujjhMq%q3 zO-{0GdN1U{A>Y>ghLkSi{AZ!5;?>MRFqME_?Y_4(9&V6SwvvFPn!_*fV>u7bglOX|1<3wX@7-#V?iY5V4ii+Ul1`kmDJW*Co${Uz+f!& z%*S&81zt ze5T$n$54@kOkXi1dMlQ4`)Xq=*-9RqG`i&yUISHBfrvX(P+2bH+t0Q{p{eLzjHSV+ zH-VT2C6Re33$_0dmSzxba!CbAKZOKm9Jd{0L;dFhVcH_?oR z5fm8j6)3bY{ucvl^?WTODblUYZ`@ZG7^D?S*1>R9v}Mo5`Ms@$xiXrhq5x<*xC>W> z2lwCK<$_+3ms=0)U%}6vqa7d!12?^Tg{{$Qe&N!xhYox?hDC|Cw5!j*Yp9eQs3>SB zIcoee8BJGZCv6a(@UrjB`AO$6SQpQ7P<7zgEx>P5zpVi=das~jn4tyZBwvqU8D3Kz z1RspKQHtILMbWbv4wVnq;zv~;C%7tVma|d-4MIBFa)f_OuyFoI_j26hahqJ6zI?XC zNWf$)pY-dQt}XQS%63AbV~nf* zTUvPrn%D8KYzc2ofPzy0A$tL4qB?CsUJ$j=i!p6E0*(jWH*InF4svfEsG@_Wme61DN_NFu5iCLJk4J1d6?uPO|F;G~@iA-$!O7<) z{7tiK(cr~#DE=ITs-K{{i85gs3IOk4>ZbtD9ZmYzxh<7uuVEJo5_KIjvY-)JwSAt(re$?wak{IPRtJ>+N{0V9Lk z<;|MV5JI?XXIIFkQJ*-?eSpo@JLpVwN9QzMLoHS7^Sh_d>MU$}jMkd8yb35VwgV{9 zl@^FNlA4MXM9Iz(FDiYbst_0js_mZZf8I z`#<~DZ~ah3f{OZ24q_<$HiO?sG1NhY{!jc2^B*w(8{Gfln+LRxhJw6Efc^jH;rDLd zS-n^-W}O25l$AnT8S}r&ho=3u)juZtKf>rYxS&)DUyVTX`!8?uU)}t_vp+R4Q-a9` zgPo$q$F216^iJ6EyjneRSECpo)lSoN{jeSIn!zfGa_)CdWpVTx5O^K9Xs;6p{ogXP&!gLquba`X%8VD|zW8f9fr>RKmG=hciy-bvb zJaCX%lzCjV*s4@S?CRAgQw_Y!ji%EQFObFoKwbXJdH(~N|IK40$$lU#ZaD$()q_Bv z2r_Y2U@YlY2PiD&BTc{p(Vct-_wp9LZ;iX4=8nehFQ4H08QvZr1s;=DE$>rcBt`NY`E-YVv?)|9E1ol~ay!U-F}%hl zS_rTLR>}J|kQm?&Maswzv}C8}@sh9fEv@uhqsz4(cqq&-e7_v4&%;8_=GDB@J}MU~ zUl0TO1?4=<3KK`~ANxEB9h`|(4q}~mp51~FyGZMk*1UZId_Pc2`i)(ei{OFe?&)w^*Mul%6q?shG zp9Ye$W98(1S}-*EVIo9byZ=DoNQI&l5?n^77*V<{AoQ0q!`S=+9tH{8l*gEN7)`~| zBjOJ*F zE62@dHr&iS)mc8vtq`4!Y$v1`Yxb-Pi$ zE!y4qXOW|0e&V0(@dpcS)6(p4Rl=xV$=;Ep70YMPPp$m0l`hD+RZFcOJ%>FiV0}QT z-#@f;=8Tgmpvke3Q2IO&Lyi)q$d%iKw2t83f%~@H(g~y7+Bg2KRRgBk5lk`#HxV;p z6zfsrtl>s_^hljj?9U&NPJ*7+FAblwa$7!zA+h(BCbY2Kp4S}a5O33ce|e_=-rFN;qJvNj5?@l| zPog*a9tzrNmBonqEw(@GG%u}?QPT&I6MR6CkE#e6Xm4d{tuu~NC(%x)+Sq*gi)0B0 zaILO+e%8O%jmT{dQD!qMy_>>}6t-6$6_&PonEu>4I+y^UeXOr2 zDp|U7_P=^S1DYU*bC1!?*aZj7?z8uqM}ogA$;nck733YI5@_AkO|Nej+6sTlU4BuS zESr!^V6Yb1RA}pYR(++IVJkh+gMJnb@}&8s6bH=KV{KV`jBn=yq=%a*|KM)W{f(X$ zaNUnHW6!+?GN)RT5G~e*F$H7Q12ffTMKp#z8|+xj6c&+VlZVopiccHMLnrf@#vk?N ze1Bq0FBx?Ty0nT^ah_sf#03rj?V=np^Ahb$)nD@+yrmsRHn~#kj)l70umv2)y{@f2 zxR6BsN_s$)sANH_=!RW-AbD%7*)iZ=d|-88mak^J(ZWG`vWcwDam2>CV8 z9GC?N%BK7gEP{bLpOeqA?9Za9`E9VzYqp)DztMCY<1Q}nX7RvG6l~16AJ{uk9{7U| zT=3*_Np4Tnx4i>!>1&>B>(^+W;%i*w^A`(ubCD#~u|3BTcbjL{ zklYe?e-ho%EZyI%=dr;SktF*rm*|(XBIjUe%HZYKx-TIrYmO0gsTOF0=@z8Z+g}dw zKlJl&4l2ih#vV~%XKbhl8E(&JX{j^Z5t3H4G0rcn`YijF0%K@wGHOOGiaso4A1};u zE0IG-7E8a{pHOcqD@}ELx8kR_%%jKXi%`I7DROG^Lj04>21IY%iHG9wPn+YKi7N+K zX-@Len5uzfi`bf`BDALYBv0pAK-{0UUw$xLfuYmv?TD&y{;JLO&44u-SN~L9) zmWPB$sk7E+2{EdCn5h@5^&{KP)WQ>wH{*(D~#)8Nb(^^;oFc|ySP~jud9{>HM z2hYF&BTPAViu^)04e3%J5Mm)%XXSL$x#=)F!?w7;8* zyNdB+?4<>}<%HP!VbwLwaS9ALT6f7hLW<|wsqD(1L!G0keAWqfUTph&`9kDCO`hW+e^k zB9zqY^1X*;S_we{v7aZ8R6bPO+?njgkLf=dbkWno(_Dto+nezwicZ1U8rT6Qi_}e% z%TJ0+YcxuRG`BA_ILS046(jW$1;Z7IibrC@f~4`f+lcn0cn}$k&%Nc9+%kfQNKnt4 zf2D5eH$zcQUFmGuwH|bZ-(PX`K1mMZ zil06zoAcC8Jkfr?R_~WMYwS%g&c5mj^)pA^>XhNC zRThpqU61j?SmEZ1%M0Q*m{YTKXY6W9P8Cdf`bxnE`x>D2vk=Lg(y^Pi!i^i?T4%7J z>GE!&z~Jc|mKsxIrt*CLUDL(B3JL36AV*thiumZ~I}_33*(vKmNfZD_FIeYUP9)#e zblL2Hvxv&<4p?=~=E$Z-QGGy^KX7s@i@2SoEUwt2+MO393A=TnjgpNJTDJUX2Ng8V zOoVYTCqyDbS=n<*lt-?p&9>(8>QM|X!9>O`O+nk)3!&caG%Qeci{)W*0~-OG+Vp~i zO<2qbjtPU?I&FnztjbC5P1rXkndxR$iiC}{@tOQ+2oH$VgJlxBZ5f^v77(R+&OcEa zq`>%)w^e5(eBqf&UJbo*VyHo4GHv?_)Raegai68{$2k@39B(6?2QbOJAO?d(O;^*a zP?Rf(LT0M|ZxrrvmT>^k9Bnx|iQP)?3OjPMEkUXAHr975Q)#a+EIxUuBGyJ7SL-~7 zmSUme6)us$FDX+LNhcFmoq>DC<}R~#5YxlC1Cy4R*;-NO*_j3v3vqos>?c0#Sfjf# zpkew8f3lo(OrOi&?|&c5Z{{mC>@1a}+SycTb+18~k^*DSPY508zWm-XaY`=xpW^@%qoRs=-g3nW;|vI^4W zQ?10=8fEdlt^qS-vW`;Tf~I5aeGg@5t9@c#kc2sn*SI0-Whq;YCr<}E%>hH5YX7La zeL3AJA2+L4u|{+;UWL6(BycEgzjPAi9wVd1HK((s%yQm8mPqW4a&%SC3z8<3M>i}D z-qMKe@6c)?6|*?mSro zaq}GrQJL?@bv>lO$gpr1PMPo&+0`)^dJ^1Dxj}7CEA`B^xFxxaD^M4W+~`#~vM^1wqo0B-0+1V~Vpz#dRI~_<6jto3_Vf`o@J_HwcZjS;U56!d^9br zDlvjR6<;$rd!H90A%vuJI&c{l2F)f%9)*=TvwQ94ld}_%=tdrFSbABhJeM@35y*K6 z#^p;S3|>*4bPg?HFz`(QTg*4HB2O?BU1Px@&%1r81@95MX=#pLGq%46#1j8%>r(-S znYRL9vz^{DUsEEz_JM0a^2kbDxOfrdtZfEW;Ns?ZdNlmD#z#a!Hh$(0$8jTi(d zqhr|5*H?rMKfoC{?H*V=QaOcJ~FkkA%BYtFRG~X>4_P+MDwq4FXY0k7eYs_kQ zjyL0AW*En^xFW;i2%ZH>5^*#g%*(UX6t8Ucjj$+21V^Sx|mmm>cl- zWE~u+PE!88&`;X2W5JMdoqVKT8gOMH1Fq*1YYoD*Vn+q*OcM>vc(U@K zx0he=wTv~B;k}*LdX_9sSnpg1S^gb*OvyPhfMv>IbbhB#Ttp3)Z<&dT)JjsrjPqJ$DLa^7X$;47wYz_A< z>1Na*p+lkwQTc|F53ncYkA&}iqhk%rcV%~Lig}?$!*qkWZmjvZQIixs-N|&fvaV`M zn1i>xe1b)}KbM^m53`~1ADL6X1;26IvC9MXqOYp#dGQ47XCv&n#I{nRWj(n)<$btsE`(NgCFMf;8i3IT9$I?&{}qda zsbmftrf+FA04u8`JmX(EM0%=h`pMlx$@1s$ZbP8~YrXVWiW62FB;spdNFFmy?grq4 zGxR_OUIrLl1A=BW3tpFCF7$87Vh*`MzL%qNHxw8T9)Jm0vk8bQFg_wB`_U_8P0gRF zU#($GBqasE_X+L2oCk(u-6&;?1dlIAOew!)tL|OIz{4+J^R^wDdMj3eZVxu9%;yp) zCjKXx^+K?b7ehL$;G|C57~XA}txr%Qk*EQb8STcD*hnN#(RG!<=O50zh(M*tWa@{5 zrIJ$yA=uez)HNV)v<iGz}(^L(tmafFcXi_FG>pZ-7B=;W}=@wwCCa) zRP8plxBqc5k{SmFj zh~8Q8#hZKAfKLqHl`I1M4&wC+?|>JFJ5Eg-eMuZbB)qtBhnBPBHfjqr-s0oJYan5M z=BnAD?NAFw`M31DbB|LYHcE~d)adW}28NO;JKih114X~jQd}rrPS1E|(Kgu@$$Z(4*E&;SG%M|d`=_{G%petzMrdA^6 zpo+Cs^%K8d)Q0Wf5pEKvNg$yQ*3iX@+qPd=?5kqlJ3zCK{-@8a`3vWAG=DUi9k-%P|du5j}6jn6KG)(CIbPw~Pc_PKk(6#I3P-EeI6Zi2G0te;U-7}-zVw+3p<Qo z+pBHy74o2OT*T5rFa5f}f=;>nHBcRRk>c-r)oOf70PJu5sX|6}4EExiErLq&J$HlX z6~sIXq`^IZQD@@9rC;D4!3iXGVPCVA3A8ybu((Qzn7Ri3pm}Khg$Ec*`6ExR+Re|! za!CmO@}>V!FNAp_VHX+ZZv%g^l3cwuBm0l6awL>oTw3s#18|^ewhwc0wbfLm>vM5O z)fE0TXyTyl}Maa1G>zdX@V^chtbEw$xpE%>-_IFys0c zRncA1jI5(>mQ&@}@-*x8$`MQc(oTw1_nc=zb5+>TJ+3>ENDb$9&eo^@I(YiLxs@ZE z7OS(1#*@;{LI2FAU+vYe@XA~QmZxL7NdD`tr&Nm3uS)iZU*$Z3A3@PL5=|8=|6AsxMV` z9LERh!!&sx4ZV7>UI>AwhhKoa7PtUXAYBFRS`P0@?|Q05qB`IU?dA^r_6hABa)V0X zS;fV4MmufY^9~YYp9z5yL`fV&U5K$*5mr?eg5PLR&I&b$?yuPAL``f(m@1@TT%nYzRRuqWVTSkJ<2Q|VZr&o=j zfP+^;7!!ftDp8)7n2@WhVl-HQB^c=H$oT~}wfq(zbbmWL$iXG(qk$P0Hdhl9vg>Et zSJ!|jdIS$_aRq-|zpm_bewMRrat*w7V^ouCj9q}%itIN!J>jP3%JdL6KG)T{26DDx z=NAjhTAI$n17Y>4Dh5QDzYK!Gi`03s#G$PNsiUJWzf7M^M{gQg&cjN2EQ=pmH6+J_ zpzO^z4pO(nW572X<}5n3wnDh*Ir1XaOzQRs4`ni;)C`Fa{x3iPIMIIqDD-#fruqJc zU;f|cCC8|A!3CiX9JzB1>}>_c+`Hi7`@jFW{u4&of9UVS5`=J@iBZ|uph{%v`9t!p zpFL(_l`1>%!uqEA2Eas<`-6{@%a4mK0>JFh{dZ>qg*KS-=lQ)Qopfw@+p9^d59^9G z&HRkFx!CX;h%W%=098Vce@naKo~+;z8hm7+!dP7;^!{0jLZ6wmeQI-P`EEhXj4wy` zo)G|35D(+1{%!9Vp339ANB$4Fcx0G`zZc^N1?LPk2BP(4z_%%K<*$K-3D5?Y^HP;x zkPucoN(f|hXefS-Eb11NiS>RRX-hBNJj*r}KvpL9#JUf;Kp`S zYx7oeTZOOv+JZk`1OM>Q5Z{Oj2I0;xs$VU5yW+Ox$UwD%s^tM>{#tNIVhbQ3HITeg zx&WK#j-AaQq;q#m#8{SvXS~+i8`Hx5q!H)mJ6fh-#o;oK=F38($+DB|Sdf^}zXi7( zzS;}1;7V38po8QY3=cZoqiC5`ck-5s=f==jWfxG979Vt8F9$>-byfc4d*8Oux8OT= zFH!it!^g?8XT)C0729e^$3jo!f)XN< zGIWHsg!G4c(&g_RA9sc|ifVsr00>;tTKI#_xqQo_92Tsz4eH$YXF(06{lDnq-}%k| zlQlK}V9mBe{J=k0bEv#%ZjL&Ct^`tKts5#C!98$Ds<4qXB=6d!aSWm{m!9kr8d)d8RI|C}YvTDMbewWll=Y zK!uPldHJhh?OOjBJD?S5v>v{W;70{a7MjPqVBhlCj3=zifAXt z_X^Rr&qcZm6Rn%FcK-yufiz#f8j&e4joUWi(u6qMi)SDtzuY#nCUtli_8=vO;_q+) zKne}{TVY83-uVrM{8AyOYUH;+4InX%c+%?< zVr?BmNW~pMPXK!&zt{n*aGY560RXUDLk9`i&ZACW;JN;0cb)ltpX$X)Jn6CapT@uH zsqru2M;P&_TI=~6VAuQ;uxCwL{h@*W`rl+Yx}0bLPfURt4gz3TgN!Zf$ zdKpg-R29CMpn_?jk`$z;I1X$qdKr6Imb@G@O`0gkS z`_Tnp?n@gWeUq~D7a;$SH~R-%2j<^jaNUIW_pm$g0{@J=pCWcK01+i;!@A{JV4e-4 zfVhRf0j6tp!0hdQ2!MKG6wnSiVB>3A?fgwUnVAfoPD|aJ0H`;)H+{&h`#}vbF8?JD ze{7d$=4G9l`BGh-(pz?5+Eu_883#kwOM2>7<9i7zv#qAP`>rRvZI&RZKfWcMZjGfE zp|2JNIUq9xjN>vBCX;#K1@u&|n(i?GFMIH%ucR1KBc(k0Px<@fe!zbs&bCG2uU@mX z%;xt_`{b)GcgC;pKQrYESHRbiS$L{k%O39w!?VNl@r5l1{&XPGA(2HB=Al=+Dl!u* z%vsE@B*@%{&gg=pi6Z1YNRO}iumUFD>=OV@+9>>OPlgTluLGw4bpZRe#B%EXdLA(X z_=3d17u=ndK0K@}=D^8EnPpANu_YHwth`&U$$Ikz5*6HZ zC|D0}u)~DC6HeAdPy4?rKf+toeJPLNzb?Bi-}%HBb`dSfm$5uv_k%*gpc2{slun2T z{L*6<5Lm>Zi62n^!ZZlBVLMn{nxF48UC*esgb7s z>(akY{-gQV&cAQ|)s4S2D;)P9TAUnNFL*(+^_E5L<#Me@53^n+28ZVpsd_lduvN^2 z9f;a70&ilzcv}P=vL80u;M(eQ9cklp-YxNQbyJ{}(!$CZ8hE)YH9hP~+kCWNC)7r+ zRn<4ZJ1<>}@gG@1;%c|yf}+MmB} zgSHRzp5&ir0(0gYfwrcdU-FX=`^!CkU6<7VFP-`#sf=FdQYum00hpy@D-LlN zpS^v26-az$o&I+kbO+*Vuo0K$masRg*8uNlEUA8PAnU6i1@gIBzo_LDORxwD;E|+} zpM^B#oE=d*T!g(c2GZDa0{)17F(n#vFlUCa%As?SFVw zF!fB%XT#vas~_?i0B_d4m$ts=ND`JC#jOv0YH;j&jY!*!+Ok*|%XuJp_tb%#7-3n| z^Z?r*lD8aTG=DP!q|y0%qR7I>L=L4FY`M5x?mf85Y*2Urt5( z4QbY@}h+hr%(Ahs#W?jdjza;TgzWz7T zH*=OPW}50O-c@?*muwb9pl%nIpQu8i65or{9^U&Qf2SD0wNG)T$BC(dur&@~22O)x z2_vgM95{w3N34Vl@>;{&3T}ZS&e$L9@$|ke(gxcI@?{r;!qv7s>k_MoTeh^{vi!Zp z(#Wm<$0O*s(F8mLFoyy&M+H8J&(a!ZSbe3u0>UU zmGd;pGw@A-1bnIne!IQt?^>esm(K8&B*1s5{`S)!YUIB>;5V)FpIjm8pFQ}`?tnPf z`QwxR9$AI{7Fl)Qe_t<^wXCCfFBKyprK)lCL@l3$$^=?;lDd1sD}$=gulVr&6(&xl z<~_5fZ-38Qc1;;Ji@&@4@&(3TG{i&%@Z2X+&;8QneyQ|g+7`qbv_~}_M^NyzJH!D2 z?ZJnD^U!ebEo!Hj8ed74%)H0j&Cowd9>EgQdzr-NT#W#Qo2TN)D`s!mb{CHq>0jTy ze5lA)uSUxEk5Tc@q58KG^&bb^|M^J%{mkDcyT9px=8L52##mr<{yr`0UMn1%_--9# zs6W-^P4ePwb?`G&AcovED{vqhb^(T(1S}fzVq+ZSU3p@$zX>z)YQx*zE1rpQzr?=O z-=|_RVu8kv~%7!>^G54%2RgfzluL z`afbEw2=0|j~)cz8f75=iv~khuCO)#kzas&bO1l_e;Pk}iL><6O z%xt*9lt!HW%NOUNu?V-}1JTvo@4FW#3}PP*9z11Z2>}=3|LvlGzO>Vg*SndLsRmDw zYQ%nNzkLxF4R!;eKThF0&FKA&j`QmhzxLtkT}n>|Q-Drp0iFN#xfQbc-GIm=*`~az zqoQ&Gh~fs{-%~&TNCQ;{izaC~9R#urNoYR(J$m-<*+BosUi`yu{CEFP?Mdl5+hOT7 zCSdBxSpDjpdT`MQ)?iY6Bna!C%!7Rw1dI_mR5Vn2>k?3hrb33!GP?ulu*M)9q_l$= zLlKlvfLCmFS-Q|YhZhNiV(bohO#oC~oJA-n>i1FwCg)Wk5>lKG+YvIVaF)K*H0Lo2 zTU{|dAxH838P)h(yz(ET=>LT_S_q*8_znx~_j6o+8_Gb)I{g23&se)!! z5;&`4=FfNCaJ?&b0%ZfJX#bgw`Tyc?M4Z#B6hakXv!k{r>sl>9yh#f%egC6L{{QiB zM7I|O6GF497c|vJ?mSeNqrduxO8T$=D+5~LmZ!4*CO?P&=*?KG^V)JuoGJe0y9hF9 z0=4F6t2mu!HEh;qBK-EMeJc|8o(~%GphK*796#m6J2;{JZO?cmB~kiR*ePN~-|u>I z)(;6QPbBJa-Y)Hm;dIVgd3b9*t?Yg+Z|3kZ4aS&%GI!X?aKbJ6MSaA~#q10>M?I9e z<&L*F28X(@7ssig{S+k_S(WEdG0>AyM}^n%5e9q`b^rou(oQVIE3`Ay@!l)WnjCAN zWY%gH&NPWm&g3LK`-+l12RBj=FnFiL>-rcQ+w@sq*)@Av*HvfG`+(!g+gV8hy*xr; zSiqUR#6Z7~Z&A8NyVrhQBbQ+u@@y=cyWp@gBF~C3#43MW8S2pFasS-;La4wQe8wS> zR7#MyutFxMJ6*O8jjqkv_&#+5<|4q}qCGH(Ng74MT;y6l(W_f4EvXpVb7yDe0IvL{ z!K?@kk=tvpK^vAt33tJbUVhdQ-!p}cHR5$Pd2YiC6YAThcEC;F6E)+t+G^iazn6x(1cKtfx zINwiw{hE(qLFl*Ej5xZ}Gjw()#Wyu;4L!-+`MGT01#pg>*tL!?ycsMi&M_J*PjyoI zh_H?m%YC`a8vjAgNudRNgV}PJ@`LBzb-|lk1S4;&ab3T9NP%AVLSlx=kMWvo=An}L zEiL(b!|Oig`$4>bXhLt|sLWzF7lTKiErnR{F=J#E)`-K~2RbQRkERdg}VCGS$$LUczL$)>?A1_@|swOAR z2D{ZktMxzb=uCy6jU5fbz9F6J3d(oi3-XA-fZ-)*HzHhDpuHTgNe>=noL|u01-?QD z@Z>RR{_vWt<+$309TyMt@;FhA*Aeo9eLF=Vjm-EST}L-Zbz;=lycj)MMa64bQ(f2O zjE2i6CIRkDo}r@Moy8Xc=RRrQOsJ)QlMx%N2?W_Q0RObXT_8n1n_wNQqZgaj=5b zM3XJvLZmmefO!r++JNPP-!23=f0T#ZS}*Dpe9u1m)XLwNB_R}_k+js^p-26oUPbIcrl?a(-LYCQ?^l5K^TdRT=YI&)M@rh~`M{=?6Jtf(vA8*~dp>YSF92n)v zGEe_}uOIW(C2)fguD$a4j@$#S1P|cJ=`{aC9?I_y@PGb(25?A^GQ+bIPoCwid<>6P zmwVj$-$i*zRCMD&61#L;sFzh1kck63q%JOywv?ij@@#Qcu}v?2>eS^}&XVeJ06{k$ zhbE}P78j&X&g+h(+!!6DdS9}H;v>9ww~(NQTq%*6T{WRJN3cA)K`}U_fVQB@wm%Z? zA-p|6+5imD^$`j<##rT2zJU}){p zM04zgB9U$#Z$W8E#1;OT-llZcRVF2or}NO<>yc$VURQA))9smgR*g4G%J1AhyPu`N z?neG1YSrXEW5{OX6@cnss&Z}$`FM0iZ^T?f#%QmFEoQ@nX7ui{Fr3__5}ow^-;jvpf`|KV<)9O+_B5x`>*h!)@di z9E(SpR0odOMi8HsyXKB~b)?%TP2+PLY9d-@sG>36$vxZ6_VA9Bch63-1s-rhae`rP zaX&#Xi(_uGH`wK8^0y+jZyvaKoYk+p<{!On5;w#CrnWfPNqhK}(!rB&_0_DDKsiWA zpm?hP?d!F}7hgp_xZD=d!?eCrtp1#*W{WG|KfrPyGUnC=c*oA=M5RV5hX>)5=J<95 z)=bB*+%1~WAJ+|HMO`k0`3Y4twW_$hI2wd35buPE)S&Z7;nHXtoM7_M#JC`2df~YT z%6IXW_KM1}1S^lD9H;#hKXSdIc>Lj1EB;(n!qdz5?zZc1?i3Ycy4v|H(1dihRP;LY z$Y)yNoBDj;^AFtTsCmEnh*?)Lvv*!8eAokr5Et-h2JC~1A7Gn0rpfWOqtmLmkYKRq zGkOD|>!r&*A`MEa>bat9mRX$py2H55_bF0Aow2VaW7Q_6c{JAPJRg8q_V~b*|fy~gu99gj#uKBb%jk2$bb=o(k3{IfEj3h96HXr9!IbWoP3uq^eTfNCjMo& z1RB6cpqhf}V!){<@vu3)VZdSuBlJTTsij#DNGwz4@wH%7k4j>CdY{qyVu$tN{`>-MSyRVMm4js-F8r_ zL7bG+kKyZ#m=)gDbI|3UFl@bmze>4y;J#3^+^TeUe)68qA`RA-p%VW9V`+MA)-d|n z28cfU=$=tSYFjGJj}Cts#Kv*qcrEnZJp5OX#mk%V^T?%h|l{tsvtiCJdhTLNsyS|~~NES0QP9i7)D z&%VlkT@6TCXh6s}A;I)`yT?QGev(JK!QUppIJ5FdIfp4JyrSJ_JYf{`RhBJ2@BK~p zYif_&h(Wr3@)g{pF-jj)!vok-*UjG#LR@m;CJdu1RW3H$mnbGg#}$Y zJI|X02UG7X#L)#6au>VJuXvcQ;ZpI2;xs=&Hnp%?=npW*vG%B>2=0QDGE`ZA?Y)ev z{I^Bklsix$soo+O2y~zZrKev3=~y=#Q%7>JDu}R4km0q$c^rtRVlIe_(?0M}*Dv0| z(`oU_k`uDwbJ*>Z+?|3;Xema6z$tD!esgW_Pjs`rTtHE3SPMIa^Cn|{6y*K$H}(sv zOj@{<>LMU72|glXIDKhsDGtlm5c$f||2}WO3^=~SQ#CdH!1Q8yBA=)_p*v#ceZqn$ zO{~~r)T*jj{NARD zbz;W_%VC$@6gpfzf)m2tctPx6KPE3F%T|-B7C{?GdL)@Llt+(Noz&P3Jl30ws*6h5 z&AGyOtJJ|REmwuZVRc3tZnHU4;eJ~&M)W;#WlR4ZRq-QTk=dre!$tqrdwHe3mn`y2_YT|3)tCM&gb2?#k-- zbfpX(Nnyx_ur`O(a|Fabb4rq*U5wE|K^u!==i|dsyS3F>KHUzFqWtVt6zx>Y+~&!4 z+{($V#gGCkE&qMB=<7QxZjAn39C>bahBg8a%jY#({9apHp!1hcpfy3j!)Di~OnfU* zcoz}tLR9+0zRw9LEn2=a1O)pAYJsan-+_r%MXMggH+J2+%f*QXT#0LwnR0g6g+0toy^RIeGqb+k z7byuNi)b8#LiO`F>LXHJGtxvMVnv$hSlj%?{!L{j|1Ax!mv+7M^JU`@JJ&tKcPTty z=sv@>{JlfGQ?X+yyhsC!X(5yYorCY8PLb0$8FbB~HF3(0dbbViJ9 z*(C51>#edmn0IitYPSudxrwfYBFS$p+c4_w-LiXALfiHoYB;-AR?jwOv0=O1l1NI2 zYvE<&c=C}-fgUN6-#%Cj}WjlxgSezVO=-7yVHrq1eR>5Od9=HIkSOZCBo7WIZ znPr8JH&P#K40}0#?#qGJItRzjk)KC%I@tFsVj4}#D`QvYuT{xMDu`XoGQaRHX*(qi6}ewjhR)s#dWNav4WoNlX7%nMhFNMRm~Glfqg^vZ&%k=M zWM&PKRnLmi#7VRmB;Y@&RECUR_v#3;4ohTVK!|LGy?YvpGHUW?-?i^wYLbDjy4DQV z>(1CboIn?xgtXfnRY!eAaO54Lx)Z($jjy0yPe$5u#6&(+b!gr;aWRNYLJswo7AkLL z#3+)ziZLvrwEEabzq;|PGPkx3x2-u;I8!kw+)KrCjw=2_&vA&W>7~psIE&Vt(aqbL z6^-xp{kB?#s54PXjwTSSrXf}*avz9OCyaGTh!>CbK3I4n&P*B*0yXh*_dj@AFKiv{9`>zkHLzfon|6Q4);0 z%Y|hk#O%a{`fzm2n9^7so=Y~jtV|*cH=CnK3#sNv!2Se{b?4!WGdINUd$Hq*idFG7 zd2Y57oov^F49XSl76R$Z9Vsz|^s{CepLEqDYfFb9kAJkECb)7&h~;!F4Zacv=-7mti#Vm_Ekc{3>q2(Nvm)?&(*h5=m-n#oXAJ=d4(}m-OEk z8GJO?_>_0ZAtxc(m?hrOtB+354RZA6%R z%S7BN{D5Whhw$@zDVps2u1P*xvYw8#Z$mNW5IKjl4zjmj2XWpQJ)&RtNYy_U$J;!^ zem&gOAFjx%hHzP3xm!iTf`u-^J{Zg~?}ykG6;eK>70iUW+4e(YA`jPxgKFY~(jBZz z@86e#dVy)RR>UiAd?TQhas}tXg?P6m@cFM~{9Z9LB|wH*qju^Eba6B#PAKE@sMSN5 z(_P}NJg5rUbaY@V5@TuZ?4$YqXQgX7GCN{UQ4xMGY zq7^=8+Izbi@M>`V#rX~{n9`W$+k?Wq=#(zx^f^|>8N|EJc~Z~UkP|`S%`ww15slVib@eyvTa?b8-w&zwf^j;rQ}jc}0=cR;Vh3lRH?zUB zp}jujK<$eCkmp~Tsu-y+$A6_&cqqji6sa3g_4r%YNGP-%uRhCbO0v57$!JW`X@T+m zLop*;;uN3gQP#n>TBluDUQJE5i<5LYTTrGYnA0C6TWRP_^ag%8#jVR=%W;_ed1bwM zQ7^`nW@@GEOrgWkUepl0LrQGfSjC-=S zF4t9)>p}Quhl4~eJpZN_X*irP9?GDWn9pNe@k~5U=kcK{M)=({mDl}1qcvMW>BY29 z)8!TD$`b6{D3a*5Ez{$xGY1bF?V$0K56h8)p}wV8)kVH-gKoqsf|hIEcUV9``Mn80 zK|`dPvg^IZ*3*V~30J33Ka{Ga(Z*cKg9J3pqK3wY0blIMeKOa4M&>6dR(tEv_{Z&+ zA}MM?{^|YFw;mT+yl3J_(2^a|es``kR4bFIMHyoiv+k@=MnFt)GwX)jL~dNMNuF_- zOA)+urW9bgN|O}@U=H{TTMLuN*wi#r;6f$_k&>^NSORxRNi_N#Z_l|Sdv1!`K8Jo0 zGf`?p3ZTCAeZ`fu>6Y_OudToA$C4k=e*U=I@`-6(Im%dLKPDb*fzlQC`2Zm5ao4d5 zl8WK0kEZ4ozqdu!&x%arRl6<0%mMO=n#y(6eB;6nXXa*5EfK~>53Au;)E>Mvsz=^a zj(hprs|)P7V&)vJg&OyrhCNa3I5S7gjfRt^4|dN-R98#nXT#mPSfvUQBsJ$;W2(B> z`c}F)hXkRhH%8Ahzqi!YrTAfG{ATO;+KFo1xlYmz*~<+VyCQ9D!9EX8m+y$~;^>^n ze5tdm33rN8%CE9Z@^H$~P#RrbV0$#eQK8W$O5%3Ls;7RwHg{cL#3!S23A~Oz? z5CPggjV5yQI3tG@EP`xT}L;No$Nds61AmuGj`B zIh1))aGVp=wsJALZIM*c*5DwlFY4Qran(iyz`SM zFWLCgNLW@8n9R+t9oOcL?t3nAUMV;&xJqm>f48uhVQQ&~(uZyuZ!IxWT~iY>@a%D~ zpdYZl=oSzNNF(CEX_^`FB*8t0y&-1$WZ`CXiBM8pc{0+qB4C{VU2sxT!h;Ao(6&iz zpy!4MWNl}{hj-~sIHRWp7kex86Mny-C)4XGb4&s8ji%Vu^3XcoHcZ6qYg`=%T&kPBB+;~9(X3=Z^6jNE-plll7-Pv^1kMK?d3XceVyl+yQ} zByVu%TPF{#X%rN$dDAr!J2lYUs2%l^FMF8xJ?tw77mE|PVgXomk|!6Rt5aWE)5u^` ze_Ml|Z*_CsNOo%S&b5t~&o-~+Y3Os<4A$`gGPU%U`4gX#tM?k0@YK7*Y4oD+W<9+R z{{rr+x40lv)K}9ai(DgAtXqM8=_o;B`O@+?X6}vIkaw(l_xs#0G}UpOTk-O653H!C za;HcQE{E3jJbK;X62=)aC?grACwrFrzE*V6xc6;JYeRNpFI{X-%q&C6kbuDG*CWfA z%jq`VS0a}C98wuYRD@b!Wa-$3Ew1+QHcHpGqxi{)L{-5^1OC9MPf;%5k9au@1y@HCB^TDE;B~3$gDW4| z6CD>1bswNjDJ)^6uXb4t7B!XQvx48Y(nKUTzgF=IA^-Bo@lq|jHmBx%eRaH2uVj%F zQ%_O;e7}aZV7bZCyAkD_+=^q`5&2?Vn0n)F5{E91B2_WLGq>#61ye)M%koQZcT2Cs zvDG<|jFWW1A;IRV6uc1L-UZ=M(;`flbh1$i&#)uJ`Pr>lg+bGbvzucgKS7i~9?h(8 zQ$8TAMLnBkz4QcMgXX)n)vKoLQbEyUG>2{ICaimfh_nxt2q|sR43u4h>lJN0S1Co@ zD$b}m6J5e5e@n2;SpL(#!uP}El++wAD%9e`=9HD;GK#Iu8*LV@vg@x9A!-4~&@okSKLaoi9r;O<}Q73Ys9g58K`a z1BgI-Y%J07F6aKu+C24q(#`&#pzAjz*1`aCqh*{9-aX6rYddig&B>rCuNHFB=t;VH zf`a;h5bdptZchZ;+9LPq=D*REM`x}Ya{^f^NBnpT$gneSpDLb1#gabb2T)3#%45g$ zUDNp@N$4lC#3s7WYTQKEwzSr-niWCkF5A8g06+O6Po?%*{*)OczfbVlklqAxE10*f zXRKALD&Hzg%bKejd|PU~fmifm#K=U?AjEG@nitAEoQ+1)?&*-@F|+rSH1;fMeflqO*{ndfUN*S&^rjgU<<*RD#2 zans-mLtf4cHsljD5BkrY^+@&gp|vF3!M+U{w_djJnW!Hyo16~aMF)S|(Enb>mX(x{ zaHZ~@E)C=sm7D{QcD9C^`kT*3Z(c+-gcW(+K%bD!j3#=+Tt8(GBfHAO-@G7BdJQS` z%EcrO4|^%*PstIAFc?MMCA|o(th(wLm*3>~)8eW=8e0^dG|yXkU*++kY}+(ty?`?| zS>*j%hK+*H>IQ-q1y;<>1C3`vyZxy6pyo^lb=t*yVAS*{wVW`Sa@r$ZRpw z1l{UHl~g4vUjuLra%JF}{{(X1(|_FYnt!dLjwqX$6Y_%DF}Y;PYby#IJ5jd=ef zrRSk;ud=sGCYhrct8e(Q!w+TA!!dw!F!dZ71AGa^;Zx-c*QV8Z+<>lgE80B~pF+#Z z^0jjK+lN2y^MrM#g7A)QQ|AFP-{bO7-W+bS+i%0TQiM#Ud2YG#Tn&B09IKo^Z~R4t zw>b0u_1YDU=$x$V7qyp|ZVXJ}-HTzZqL>L*2ov?)6M5bhZ^xE#(sn)tRU9XCFqFkq z_$%Oi^}UMgIK`7E# z)feuGAeOhcKMRT3yFr$@@~-$(+Ih`npyEc43vI^|C@N>e~cgYzYt+n z6g_NH*S-T7XaBQ27Y(4+`LDXtzlwmLk}v<<(3ty69rUxOg|L4ee0t0uSu^E8>f*2D zsMFS8C!TVJ{ygmO8-FyNomt8j@z()=+~(JTr-z;1@6RgOzbIaR zbn93D{y6@>@t=sV3wU9B`TWwO%wZLpBsb{PPYLP&)|&nQv5f>pydRj6ZwuL^kW=yh zMZxn+xZA;+|Mh|xODeKJTiF$U{GryHNskbDY=QU#gFheW(uXd zz&ysHTCr~FVh8D0*&J7mOqwj%k_)HxTlF*jEkcx?o1b$NOVepAN*iz!-BpHDWwWPP z65Z`;xSTy(EKJqvdkI+JM}1kz11ED{d>a|8v7eO&g5T{B01vySk#w;jXI_RG?2xg8 zPIA$4$2Y*P67wpFO*QK>Y~Gz3|7S-9C3nJL?%l+xYjY zAv?4B$_UAJr`LFrq%%OxrUmW}p0q(p^anW#6FPUFPn!HWRP2dgQ6Ybvj@Cx4R9FQSk^o;n_kdx8T(c)7=7c;_r@ zAI3%;`v=>_$|1hFM?XOdPcO%jvbwEs6ZcqlnLtbMZ!OTu%8Acr4mKCw1#YX1X@-96 zlx9X?8Ip5W2zQX5Md|{eIS4Vu1#-schjUnOG^%%F@xV#?lQ5Y1AW}jfNP@Q zpa;Vi*_Rhii@K7ihw`{*HVK20%o6ShDVz8)`idUkfzZ4EC=Gu#c`^jlv041S2uKLV z-v@Y_OuEb=xO6s9ox6j37Q6${1>vUi4|dW>Ixf#R-0DxYy0QDi1;7xW9epW018cCG z&1|%RympsX#Pdg(>7ujC($#Aou)3#FodYtYR>*8?-!_-=+q?5Jn=6I7%Kn6QFtg6&t_(B-aK zEy=Sv%e74(cIqe`X2zF?dMn)n&VH|6jcQJ#gu(9`n%pTV8FHTZU~|*a-tx_x@RCin&ez7@Jwk7PmNT1T6Eq~F@$!*a`P2ufb z*y}YvL08<^wXq-48@F<+qKNpf-pG9J-fU+8n!md#!-9n0Js3Fi9ByLY0le z;#iLWAvA2py6Is0Hx*+QcRo}PeT|fj6)0z9VtK9dnmEUCIvaE?D;r>U{&O1t=l&Vb zsCbo!)`kH`L+Z@0sDZSgt90bRT6}f#rqpiRkB3-Afz|jpSiF(Y=$&G>lW5^?bDZ{G zq1(fj>(_&(5c!hkqsT>7+|yOZbT+wFUyTjv8s!|^?Zm(UF?UT4IshYA6=a=Xk)t{oy( zh}9>0bKFXQqn_s~Nx}CTatXp#WsyyGz@AyCBGCm-j#F<{Ini4zX@`eY?mH(6HW-?4ld4SQd-wjp^beah%Emj5MH(|vGYecVjlS$sY^Llsn~ znc6&>+cozLcX2LSvh%$3`!uptqB-Rzxcp=EV~z-x&sO_tv|?-{OH=noeb|?pXhbAf zA@Y^O8w)iPjyKv#K2G~>g}bw$KKdX`x70Fssin8+lX04SxF7?r;yvHRtuzYLFfdgq zw(EVwj{TR`&5z-LHN@J)yzvaX|HkKv8<*;^mwL{FPb;n+{%!UQ^DO6B@)5H7spYwc zspK!VD}eB=!N5uGb7%;ATUC;?tN9v zkLN?QO9`=f0bZSSK9C2ZeHhEwhF~z2Phl?|ev!OSricL>T?RdS3_e(>x4@h$OkZUz z{ow{v2~gGCPxrf+H{&siTBqTV?i8RcxTkFkVw>hJ7Go7Vwj}=ENaM!!5XbmdvggsOJ3_1(!a}9g)<;a8M$eYB& ze^5iKaigW5p+K=a{}qq5FUpcD!Aw}H!vP81`!i7sg#N~Bj|nf8t(1u-7SkvtX3o9O zSxw=p577M*xItg_BcHpQ^fgnFatDLU-V}J4@9JBQ3gv|mGxcWU?;RcjYfUz{8*h&= zQHRIsa}6!hx41RKI=&9$5ywveQn+jyl@l&3NRk2#yNI_ltw$DmZGK7K%ebB0!WYul z@4(wrZ-W6+N5|DvxY{b2RhDM1Xg#Y-nM(kK!-~s%;P_1Zfok$K4g!#QW*DO%UOPwJ z2l6JhL#JNwx`(w1%*9NcuaHvR36CA>XdopD;_dDhF*L?*zV&jRF>G*bt@RQ&pAUDx zQROdHP)f?hx!BkGy!j#g9qXl+GTE!(@OkT~dU1a~-&B29A zz*2?EvR`rz`vg=dXrOAF={XXPc@SA<%+U1=AfKDh7SmgaAIc}_20Ha!u_8&l^J5lV z(dihBTn8s}A3CLxAn12Q*HF|$l029b8=0d=)UAV}&Jx{X$E%Ae2Q0b+u(BsT`EITq zwHKZ(8p~a5&Beca4%tehq8a9>8xg5HxDJQDH?VNvc(@n~jv+Jbv+=a8%@TSPZ}grz zpb8vVmr8^W(8EI7uT%^rSaPPgR7F{?q$Bc*(&QBQIV;p&Dxw_d!zP#kkXxECh7!BX z=4Br)x4muj;;X6;e=HY-8cfI`f`# zT^P^iOC7%xdD)8or~xQPjl61~~W z#0w&$Ues8Mpm$fBP?9noPKoq3&7g^7`L(Bq@Wn=v03dOLOtV{h^~&k;a%=1$fgL=U zay4RlIX^G0-U8|{?~nn8&=I9(to#H~co}|b46;K{@Y2T^_SC`8(bAGK^)xTkL%JGS zqFPh9>ybB~BW!g!XR8sr#X2Q;KkPoFE);`6&(}M4I(+8m>=s!xr9ak45yT~Le2Im< z*xp+ZRP3a?2%5zyBBOnIC_t`FXNC24o7fCw1xfWDRJQy5FbYp;{*c zymstCR42lwCyb`jTvKfAfY6tN1dqYkxd?yFKJ{>+pP<`I#Law?rOq^|U{zcbv7~FU zEz(P2ra(n}oELWX!KcP%&IIUvp_E0S#G?;QX_y91C&KKt5Piq6{T*;{GxL7&dxCU5 z-Zj4k@Xwu>-@9NNcrTJ8d5%`dp9-jZW6B_TC9@ZOMH*1&edTx)sUbu6n<5YOfJFza z5(I*r+#AoVc$C*V*ICYL+k7A?K`WXQvn1Ge5Sd<|&xrdh&spzum21<121L{fUj z?xLGxo5%V>jP*-TNvYzP=%m=A^;2bjY=bc+!w0B5-hol+S&5E;ykjn(>tR*gD=OZL zb}^Q2wn~j&e)ae#s4@mqdAq=!$UdCa@nC>-fEV3#!AlUE9kcks3Gb|;gDo+1$4mvV zgla9Oe=_03{sg_Px0$)pMD3;v33^gjO2s*fRj6>`UX64dMr9no0;YVvD=LY`*w5l$ z#cyS;^YWhus`e~w;vlV~Y)qq0)0FsoQj*i-4Rzg7_tA~zpr*3Tx5v_jcnhOC+__Y{ z*L*sPB%z7%4|CiKOwKl81%UXYq?n{ou1w&4a>kxZ?u8YKB>t~22qXL`eu5YPrs%6o z%exT2CCOSe_zbK^5%3Kb0j!=SVWMd4gc}EjxGmpm@362T^LP)X|NX#dJFL)~$!?Z{ z`j{$Ai;V`!&>pYw9R%Zky1m)wb%d)o!}wGY4q;1VCLu4#Q_HTCFx|4?3vGLyMkRn- zgbSxqpAQ69k`a>o{y^G{V%vUNq-#IBg@sy9#oS72{c8)9DN=qZ!Qu06Yx{Wp^KR;0(?eRS9FPSyw$ zm7;VfO(HrHO5}|Zk?kPfH`s3MhaVYsA{^85HZt3A{Zy2u*5M{ZAwdf>x zm#ewmqR?79qnJ|`b$`QcRqfai`!aNjx)i4yRLI=QbjfRUN-;#O>?w#!1PN5q-`#KP zQ>CK9%ikQDt%BUHSCIIcWI@6_f{*yLGQPOBelEMPdkf*n0;$18ZEqt_H9RSx;RO$o ztw*inI_XZ|?48Bz?s}yB(9J$}#dZ2+;Rn|?>lrgvbkFslV-zLY_f?}7lOk0*_z7zE za;pNSW-p+Uk@58U13#P`@J`wrQ2+%M4nmjnIdnmAEaPvdKA3x2t|^W6rScKInlVcu zrQexE1Ure~>A{}>i(TYh^;^{x*#pj$Ak_6n+55Z2um+&0kU`C2SfwFQ@ocM@6(9Bl zcebN$8O%PkqZK9*`RyKOzxX1M$_675DJEa3?GHkG>$cR2%vA|pp4!tk<00iju{age zA{smx*9hnFZDi_1vzCbUtCHRnOA7dkzc9DaTN zdAHIcu0wx_aP?SfXangf5LAg%O=f}Il(Vxm;f7o>#_y{K4y{!&_7Tx6a?KmTlt67m zHqNH+Y+yzBT>YA%9kOR{wpi{qOQ_PCr}i2wUU*d%e_~cGtQLb4=v1)3+GbF zOe1cv-y~1SZN6gYEoPU{iNPpmY4#(VFILSM^B?xk-~86-%vrr~b+9R%C__-eQtK*wlg7?dQQr6PqgkH%*hDA*HS#J*Gd{6s5> zU-dDjW;*n)6som}bkfj&K;fCqC7VTx%B+)Q8w=B*6u$TXPO!BzE6in>C<^;Q0Xv9y z#e|r(i)&Y)z9Vlcaz6YP@5Q2PoZo`oK(#Wk-C<)ZJ(3)fB!kYe2Ai=g0-4Pg{#3_$ z5ca1|@M$0+de~t9IMFr86A-$un?T||9g*y;YhZcurS=4sg?QV_aqaaiMm{>IZ(YlC zP+>A}d&-6Kq4kU^tV(0v#3^c;?*|qGx5K!kvK1Dbeg&C3KPL1Z9qjPHP2W#b+xf6t zzqSO^gnZ`kBY%Zs*}P?+MD3|YDunZF8JEFk2f^#5EJvxo`S#k(UydQW2Lf#yL4e$0 zx@9(Y!|0LYyV$ik)0W&z*PdKFNy4rgrzSMa~kL!Oi_uf%Wwd=Zf00mKs3P=Z)E*~YTezP-md-#+8~ zHBE?fKC?aLzVGY$O{JFq+OtyresdR)eQB9gm5S{=tJ@X1b@y?=<>=i}sL)S2K|_NH z9S|_Vzeu8`kEt&HJwBT^Ch`*c;e)CIb(lJRwGRdvbH-{qH}Itc3sZ!``x3Tb6n>GM zbYxvRCrXNzM4qk;FJ5+ZdA%KE$%TSxA>G*IMyK?tu}|~ z(=4uhpifQ3_=Kjkk)UXjP7r>&HKSpbnTxApyddi7kSCbN((e8u6;-JpdUNBpc_3s2 zvH&w!4sT5OWAB{MJuRH+_O>C`Q~jh@Z4AuR3z)htQiXU8T;F*-S#|#}(Dk_ci_a1q z^;wFoB_T0@B#CT9oFx2Zj_A_{@QY=y>m}>`Tw&kKu1+94*C}l0rZk%&c*rm&hK~!q z#T5q{^%5iTtrR_nuymEf;bAI$u*`xiA^X!pQI!QiM*8CJ_43|u_v;1Ech4zBPQQRrpmu@36N^NB6cb%}sGKhocmRZ{gw9h&|BGeszr2+Hwar*Lbt;O} z@l24$eUkolE;YLqO(#4`5+K~3?r5Q}4x*gbeK$Yf&2wU!c+pZ;qd$7@{#dn8H+)U? z#`RsVdWIlV}6o0Z!m_9=J6Pfp#SdS9>0ugkJYCt#{`-T z?~o)5or1;jr-OwuudU_zBNiTo(D^N9JAq#kqUWvfjLqyZT4}SF-^7u+ZoO)2AcM&J zkLq7MWiZOom?*8j^58~*@7(Ly1@w0)uqNlh2|q#rbcw?i!>b}zj`4W)dJ0y|Mfe*= zvMD%sR}H{QdY94ZBh}}u_EnXa?A>+AA*|V%D0&ec=oD0@;X1-M(3Bjix`~qEio`YX>zMzz-7U!&!!D)= zUdVorpZR1Muo(h3KRgK>P(zo6b}IrR}J%Fcc_U!w32wRRfh!GsJ!vyS?dzY`!!5e94JN1 zbXWkU{OcKZgULq;e(dVJCeNml>HL_M8$SM+U6+%))Of>;wf)$3g~=*+3y6xRCBM_B z^23MsNWiH&W4>CNX~FZj8#OM$hdd!~JPDrI(}~WMfd!aqAI}Y&!-J(9A}#z9sS?N! z>~nL%dmc=9YYWd`Sxsj%nwF~DE4=>uT}pO1rXipuI-3=JvofcvnFZA{v6XmdM$PB8 zp=VZVPbs`teu>`MDVN@k(9`WjPziMfgS~1agXhImH(qy8g2~P$mF@Fyf%4c$HG~bq z{^;0l{nGDH79ruRY)u?$8EA3CDmUvsJ{K6 z$+$39&!xB8Oi1Y^$DBG(&hN2tH1i3y-Msu`|I2!(gxM3m|D*b zQ4V$}Ns#ysRUPIoMVobum+kveIn!SZ=;b!0J9^gwjqs#n(TT`NlAKH=hR1Pg`J>%J ze1J(j!1;;8FXA{`UI!|bIE^{&&NQtzlza<);HuLkIp8@@k5bQOBIwkV$~0Q$KW^GUwxo1md3lR5u4sgM2Y4-cf@pm0=ytHfM z&Q6n+^FAD6^$6s1rb3{4Q~gels9trYRJ4P<8;X=u^86KG!fmt!1DvC{LZs30<^5%A9mRw2e9a6?RH z&?jLxDlnoc6id%sisUye0ar++FMGJ!2=88(GOz(Qrf~~0L0;NvV$COt=5rsC;f`0n z+k-<;=wTNN`Yypf%hA=TvI~SLAlanfk>%w&Un$tQQHx|vdKuJpzZ;O)R4-}$jM9V+nj=O{IwVWG6 z^lMtGbPwccJ9w0YF@dZEfmUT!RQb3liM^<%(6MdOZHuh-)lMxF?%kp)*TACq+c|Oq zhdvuZbWXqaU28D+a$eR#Y7aO&wJT7L04Nzk512E?sc)t}*1iVXHbNt--K&}^ zRk_yWx`rq#WjcfD8Z9Q5dR@oM5VO+|4cwLsG197j9CPbhCihK{4FzWj_hdpLe+bRq z0H4sQlOP4671No)9W5e$`voYKY3PJ60`YhU;aDm}6^-sR4nJkKbf}MNyec7&y-IYHw+;B3zHY|&@~L}HhDi266wwt#3*2E2^PAjZlGW#d5{uT&)t4Wv zZ{`F7EJ&kk9UWB-K zb%0~L=uhCL@p3GcDM7nVeDZ*hku71U+mU3j;73ySs=p<|sKI}L$(3*o2{2K?x8S6R z>X@?*qlzH4$EasoH`On_qE^ye%-BQ4hO0}iWq^*{=mQ;xQFoPo5D^_F#*-WvzRnCFUU8g-lLE_z(+Mdv>|=FqL9UeRet;zOhB*{QiK2b^O%% z0q@c44pC0U%f)UTAlOa2KEsu_yLX+Qxt7^}7P_9c&O_#|I#gETWj5lII3&QqGP!&>6FOd_Q;f?xm-xi~Q8%1q?Co4Moqf zOfFW`6EuLQ$ve}uy%czwWJKsZOgQ!oh6kisRJf(TV`^dXXxq>ZPK5O=A*;zsE#T8ybV z$UISn&29iMzn4B$1srgA4Iw>(74^!TVf`_z%%VN#T5}gc=wSLS z`IKccf5;14mpk`tnxQ|7JEB3yY~q*T3F_l^lfewS4NV_=FXm|mwiXr-o+)PhKD$Ls z$LW4>5Y35!b-gojw00b*;8&v+M;rE58{`?+fSWG64{U`eqLy-VeF;L%1fxl}44k%H+++*3SXtde@ zHssaUxJxC*s!NAOXZ$&8%ej8gLT#qy^rfS)|4I!`tTYYc9)G|b+kAVYS@g|Ipgx<0 zid0ea_F-h!E)^pg^gdx+(V=7L8qw*SZQ64Ko@ZI|SGdr#y*p0;u@Eh~gY#~CiQVmf zCvTayIx*Sr?je#}mU8l3=P(q3?w0G_4aXO1ZWx+dI_bBuHP*cvxV|WVR2Bvxd?RG) zHn#(HfB|F{f{`e8XZjWAq0k4A(cz_xWSdr3gCz@N0_iYhqe~$X50c%Ue`Q=@A^%Qd z0*00~|0l1Ak?m+q>gtBHNwZ;gkmUKp5JZK`iOs%1cv7zQjVNrGn)m3DaM8t9gV2#6 z;kE;<(rp>xVwX>jq7Ze*&-OD0S_=&GpPgNeP-J;lqt-bcleGQDAWz(_Uuw3vp)KfflljE}yBhb=Gs~(_?** z5N-}H&igOw2;30@&Eq(hy~R4y@r4(Gb^Ay%0PZ>TR^^%-_$BhbpF4ND6PcbEo&049 z1+EE1SIc$LgLwwH$XR?BgZFz_ke-;{ThS*?$!H=(wL% z;XccV4oPK=s~1O61I1~v<_F@D+*iF+XjgG#Pw~s?ML(!dx4N1S!N=${166M8=kUmO zeUeOg7dJj~)wb^ye)EK-=SMw~lK5eDmCrRg6=5l-(=l&xDi2!qDO{?QjL%f0dUTrV^mZOmNSt0YZu;I>o?^FE zHMw&-rC)psT@#OLmd?RGUQ_18f4eqa@gR8Qj-;`@@y>LC5n;8Gu+o-5)aI{_7KIE- z>^0b?iQY6w4tfI$T-4G9yU%3;(8TtBQ*kh~u)~+e^TDW~;6`HbOH6g}J*UGOZbt8Z zAe1eCQ#w7U)i7JNF-M>G|W;7QnFM6Uqd?J{5cup5Cp@pAh`f%>%*$n&bO{ z*W|!I0tMzFzRa6$%1!#-Xgk}efKM-A%kN z0My6Kzx9<(4;E-l*Q~%MqRM+6$GSyg+XlXKYE6mP znWG(g^!^C?$I~GIw~pg$WojLWT}daag9GNX2tkSoAh8%jt2|^nGXG?3%f-+!9|%24 zMEf!QhOkaBXrNtoepl6^G}+z5u)aKm*lUpb6CfVga~Ap+$kG-_{Jw#QEHaYqH%)%Z zBQ`D!mXshPs$k07yoth?wyId0tc*VyK&Y>ECU{73e$;JQxK$7Y@XvCuVC>V2oL&11 zO=sq$Jla`ewz!B$Yhnw2S?8|SsO^Y!W}kg3kJQ`JsGINl27!=4PB_Y;46Y1~0;?co zG6z4|O3KQCJnmXO40I*N;9yh_N9;!rEHeEZG-KbevqvQe9OTkxN`F)iaJ%j_iHZC6 zJ*`f4^Y!8D-bLQzQL^!q%LF79 zaoP$Wqw7WcAmFZI$eEFid@fx&?%*ultHILWHBvT}*LXO;U0aRJmpTG`(1(--0am5S zdQAINTUy|BD}2JtVAo38kEz)NAIYVhpXd~lOjTtQA?USY5;?`4SN;rj?y9VbM5txP zEnaiwTtZS}zw1&k{M$x}(-yzvb2VP6_f z!}EBhojm6|AAQ*!DE^pyJ^R_>u(BVqXDp^$U0Iw{c9I&@vm1GXzEC_#t zc(wGxX9sdh5bo~7f3?t~Au3M_Tf7caSk9Ju7Ue~?HW{Mq-7>nfzZY{NoN2QrZKv{) zFFrFM*whqbX~}eFA^#;cNML=A*G#Pesj%(8OC4I%1 zPkq66vT|BswNhO_XRtYkc(4e}c&HIC%!z(+rQ?&$w&~Z(={r1H)GX1l5OGctlN+N| zXQ9d1gKsI`4&wX@D)&{n-0|t{CK)@iRnO|jT$e@*-+xPadxc*jV3E^#rAvjvnav@Z zKSq0G2LRVl`CG`&71pto?t}!Z5IB)Bqc_rSm(-Qgs7aPAc<6xO(nW+ujoa_Mv{?Jj`m;K&?Cxqc&bi3wqVk&MC2-`#|b2L=e z#y?j#V>LA9m43*tMt*OYs$Vf8waBS0c;3d_nR;P>fgho0pHm1~H+)}p0s!hkgS|Fl z?i-<28W86ke5EqYjI;Rw3RX0wEga=x_Pw~rsua%s8uhG%sC$Z(7M>~p$NvPU&p^Zphuw)0WH3a;bceo*yOGkueLLf;U`7i66VQjqTIAx)2M5^U9_I z6_U;_$7$_nwtd^l^0WW7)5_zR@HqPDO`)oV3EWCEAf)kI*Cti~2 zlhIBoPOsw%-pTy^GWyR-SF=2tWL_TUYmkjszi%a38Gfb%@}!I}41FAQJZc|u&+7Hr z<@6q|JGI~WlE-{^mW+PTTvsGunruu7Lm`3U0jDW8*b~kNg5Q(%+#Ol><}U<9m!8}a zPk*^6oR4$774m6Y%G4x$J-?;|J}~G2WNs4JKs!5SBqb!E89G@t4wYUjyJ?mS4->=v z1(KLvgNzW=y5_Fp9ir6J1zt-Vzgj$& zTy-~Tad!K2#Sx%OW8KbeUQy+5uKb(kC#L#$L0S?(+JP)ZO?@ zoeE?^{~Q>6k$;4P1pter?z0DVWU3dLoH6a|s|-*#>0EEYH!Z2M%Y(S#P*0k2hN)rX zUM{^FQFuWfW$|^$x45w@|5x|ekB!*m_xJo33w+aouzKLdmjV1A-LR#KP+mUe;lmfb z8pr}|{FBq11>fjxYn;)&o}|+;rogpm&@5qKFx3|qGeuG^%dkm&Nf$~daW_%XGovkc z^zVXv^5}Cj(%xH_n-?N8SZL0)|H{u8F{VCm!W*0EVPsw7Rs5d!34JD`p$xIG}Sp)e_6R%w>m*%QB;nTWNxmMd!;c3&(l*k4JMxVu&)sw_Nvvq%qMzD4U8pmNka zLcAhQ>yrp^A!7~C!wq8of}E z*1T;UIrBk{^T z5!zoFb~)?XT!_-qVf3h*w7xBpPa4^us9k#(ve9)*g^PRehjDgpSFA+glM4 z^gu(rkX1ibwkDE#T)KZiDSA$I zbKh=vjT<$SF6D_Py)~Ng>i!D>!&K~#m4wtaZl_>E7;QOBM!31Wrkk|enz>Mwulqr! zDZ=Zwmz#Z8-dkM|;gcoUQd_*`|*DK1GTkIjZe3nNfrZJb4{{V80H>No59S-DUPkPh28GQCLe(_)+)-mrdL|h zSv&T_&Z9h}F>2_tJOw61$+sRFlYI1z*T3*5323ujbo&vnZQCEbeEDVUid+oZas4#%W&(j$<=l}38HKz)l$ zsTS+nOyStY)Sd&NqAw53T@2;ASwj#@xMI0>B%9cM*(SoYJKzKzlICD-R^^EfoT&_F?Elm3Sc$T zh2vGWKKePtk^;(zJ#L5NHJglKH&~1%ld?ND4B&Fzn4#CSLx&>6-L5?F{Jq=ssV~FP zm=J|}1)rhf;#;+8zQUK8l_#z#@Ma&35(T<5YQtUaGu34?ms@RsPALBFm@iNtzmaz6 zd*wtD^XRu+=HW?rEyq67qB3ik1rQUyBE@LqeQo6w3yB2sURM@d1b#3$LG%@-PII{C z`*1U-C*4=ygIr&~9NRq9+ggoNKU8=;I5xy)N--7kIne%9hA zBt0P~&bx)x@{w4z;ysPTlIxeySq`B+&Y%&Z=$#INcE_mZgRe8TIYerpsy!h?EH_); z4>Lvj63Qa6s;=YbT{Yw;rNfY#1c-5yAjvuGDC-R0U$G4V9hLn*(+nzYSk~2nvcoJU zYnB)Bv`sUw^e+mf&HBGtr|rKz2B7tLLT|A+og3nXdyu*UIux6&Dh+hL_`m2--V;TYDmqp6psStX(Zv51=j}ZGxmhj3nrn{ z(>kvZ?hLZ>@@3)bgu&W8qR-01@(iZ2Z3-&mw>R!Z(91Zq0(=~q`HO8L=C>-Qga4VjS~JBmQjIc5tz)-2%grfhQ6171eg81{hzDe=pN zdan#UpyA&RblbJQhNPglEYC=`b;ewsX>^*&Ut1B|CoSr+ox4l+ zG8)fbqOe6LcH42N$qRCsuw1{el2oOI(_aMajCmpTtMKALHv*L<;d5uhNX2cb%ct2> zx0etNKt>^PzhGxb+OtpkeHSReYO@K6aXJ%d7!}Xr^)KuFv$h){^Mi=SBHsdTla}`n zsd>$8#o5UfXtX#_g~OsvBAzA7*?KPlRp^lPFTf$vKHAp|&-|)#mY}J5yY(mAk%FhA zfwBNQ6s62oJt>+o=ZmUMHF&FFxJVVf?}m}<^v_Nru*sD-z{9p(=pAI1%+q74VH%y2 zn1k_=nmmecN#9i&nH0Fib*tuCh?UO>5yhvUO8Xeo<#{B#uX=b61H%OIhYax}-ebO# z?BVfT`t|&}lg`H2W4hD@Wp)-c?EX48Q{}=A_r~1S3RLyTmp3mOZvLp~SXiR`%c=-9}{JqCQRr(Z_*;N$bz?_~#Z~)kwIqg52SHJf6 zZVOhGt1$nml$ zO(Pr@sN(}`sdVKt)ff2?)a6U3oZ4%{8#*?ZZ{t{Kqa=8Q1K{z3tkOY_fMq%PJ9kyu z&sl;zqrjJtV7vfdI4pdm@bYS@`50gL^13`HiD?6guquWp?_vMGnvTchu z7ltn|0!7J+m)d|{<752nnj+wL4roS!gP%Y12HJpY`n^w!85n#*1d?R(P2-Ex<1e^J z_WfCcAlp4v7B3UCLL$4-IM|#1ji_yP&|{Nd-*`{we6~;K??3+u=!xc|KY1h|KKZrm z{e;BLrwLMY7nKe%5*-Zj-Jd7@t0)zyUeS#z#aSn<0jHjp4%!tYt1=4dfxP4J0RZ;8 z6lEC zUq#g}4)^0>3dh1=MtU{ii+ATR7@;6R;5>mWHuWQ+b$`QuDdxY*Nl?^xf%upN5h~j6_`3k*|>sRhR zR~2xJW`*@S8klz8iVu9rWbu0q6QVl#s*p?b_0GU)ewtkJw61JFE2d+vf&K!V=PBXc zSXVv^g<9MkbZa9ApG#*Rorb$nTbITv*(@vQzD_3;P5pw3_gJ685vhr$qSZ!#I2;0Qfrzwu*9Ygm||pnezysLdCr(>L0Ik8E3B9V7A<$IO7Kqmj2 zJqX39GLdaQLAD};LzlK;%u@vucd$ZViEHhYHGB2BxKV7HsLDeQ%N}j(lCyJMTs!`1d zy+zUgI}(X0rZ;L$tVcn?PLxuLhx|;wW(SJvF-b}l zUn{vlvpMFwIoILVCl3e=t4GuyNMmfCN6jvm5927zi7>lGCFKrXe3qOX)Tdm-`>_5# z9XspvSoPgS8hyF$A?i1=8jK0lLTJ|X0+7AaJf&Br9{m)ASPRK~($J_%P-E2Q_i!Hq zdp-*c!aLJnfs0m8OxV`lQ@i8xyl|PKNO^w;lkC@meQ}9en1*chrXpD)v|wV}A?NVL z*rcJEAs6-Ede>#dm1eeC_{6ptZ{}u(T}5QZLQ?A>9ofe7xcRmLx+C2tKnM~a^x$lQ zb&l2Av~3zq1>SpJ+p%@`N#kkOVr|PLqT*IV22R2C0>mDh)U8y)gI$RXyat4#ueB8y zc9MBSs}tig1-*Oa2X#P!YXLCPk25t#6fPr@8deV!(TGohV&gK1i!<R%W{mI$$`DN};Ptl+p?a;J&*8PgnoDOE zG08KG%ha{DNcIRAa|9uu67S<1=(*R9#`=r;9S^(eo?f`h%)6Aa+i=Wt=$)pCqQ-rR zycc^nUJ3ja)H`-|ooMw8m9904((_hsWVx3c;BC4~smm=7HX+02P?fH93hU8AYsCwr zY^QjOK1I{!hbR0^R^RqlIf!|0lK=Fk6Inrz~1@R&LL^W^4E zX`ot=ST*14?4V5Zmpng6zXJE7+le{YoX8c62{DT<|HSbM>e>_f{wz8<`|p4$QqCVC zs+>RWbwG?6noI;dpKJmH0YY|wrs4RY+?cqXd))o~g zwD-c1OaXoe%fTgzw>(~SPPVAJAC+Le#Uj71<8>H+q*Af{Rm|^1K140Mbznd|bOnxZ zpuc*-`cvs|D(;XFnf>zq9>(Cj8&j_M&&7?efg_? zxge94z?)&>7fIj=lpTWY+es=+&m+E3_uhdFZjO00f71JeU2wSNqm(e&>1Zp%F}mbz zm@UiyA)8*f^c4B@+AH>e*PJu5z(W4YVNhN2%3@@seQJO2SiOjU&TO?gu?q=hLv)tp z0cpD{pFdfN?1Lxhr+O0NxLB1?E5Of6;&N)y}#D*(1m$`U5ht1mRvnx z61m0mWj*ceR&`??Dqw&g3J2g}qy21Yr}e6lL0O8@VW2NPUAYY)ny{cC{tQqfg1 z{R&O){XTv{tILzSVslTtlj3@^^~dW9R4060Aom>lKp;Fztr0V=*7$LYQ_a;*zf(fK zM`o27&@!UL^Pv?^iu2K8xhOGXrubP)S@}Ql@TKUK)|>ZF9>U*PV-2@g+_0jr{sJ)+ zCR@cSb~JL%V^seFEw+aU20q3=8wx{d$$q%&S5AJxaLJBHRXf=TTtJTR%B;1M;FsS9 z3N#d6L;)|o{NbR#al+Q^Pdg}a9_|d)lLVx&QSkU!9|uM!%eJ)2iCvIW${OhCe~42H zyiulg{*HkJl?~pPP8#Ue6z*09yF)JG$6A@^t7kaEP=Z`uc)f zD$9x)W6f?@gaM=8t7kh?yQAG!;r<)X*AY`;+BH#S4+DBBmDK^O8@I4Ij;4SZQHCyt z+4T`&xn%rTq1L`Xl@Oj1r&>kbJifSfmux8t@h{L>ln`*$FAxJPYR7Ylv7ERw?sAD4 zdV|S2`uOAc^b(TJ_)gWmH+7ZozDz#5`6`#IifjTCcs*jJolWm8<+lwO_?y_#*93kE z<=rJxk5b8%F0M=XxU?9V!El^K$wpmeGb`-%ix)l$D;ZnOLe3^PRLHt8dC1N&}zaRRI+QQx>zhH&l`J<%e-0yBSq^ z?#G)5r|>2C*rU3rnxWHlw_80&^~<#=JLhaL(FEIM&bNnjVVi%F8flfu3oKkf3;Q{d zvSWc#Ed=}GB5ml>pWuf=EH4G^+mt*cA+EnJgm~ODX$bUg;Nk$>4+3vFP8-irX{U0} z(XrU01c7zLBW);~wkM;9N?L528R27|k|X&YgEpl7STieJY*8a(8NvCsj7w>Y`Bxt% z=x)aDa|q^&(qlMG;N;<@R~3uwEtf$D$f=U2O({6#4-_++FQgJuz+N&xNjBp3(#xfCG5=?ucH0*i_2FH-|Wb3IU( z%;iMvqX3UU=HaSFs29N@ihpcp8T9sLlpO^RPZpueqopzqC8xsdC0*C{e5Y+^mu(*r z6?_GsR=;?qf4~SwHC6WhP8I*pkGV8-_jBp_i8=Vgl{UHWIJc^`y{}b9OMz1tVnfHG zfu=7$z}vF@WcC5-^)pRVbW?_^p*qD}CMz8dS;l(Z!aKCc_EQ1%QPP8krr*`r#J;6> z_rNH!=w)CAV2!}O8~~Ko8wsbBA<}2OL@aJB+3Y_zSCQiyVM$j5h%2#pD%);`{}{k&wmZ5v@zf1jyd*fwqZUSwaNMm zR5h`h4Hl-~qQaVKwn|x4atAGk@Sc7;2r}<58`&47-M(Etw&eq$z~XvmWF;|x=TJ@; zcV$<0X|ertwI|VnKPx;s8}~>h8n~PU?pDNgvF(Vg+TtLXqM*Zc$O`MKb6K&EE5d#N zvi|T|W~J+T{n}mz=uhtG->davn2naJb-c#z$a_i`2gd`XO*zqSp?Kf1>~Mh02S38Xq&9HdpKwZslKd%d7r({R0iEbm zvLzs&3#Py#!c)3~Z^4vt%i5YY`n#IZEJeLk;Rj`iPE4S`$y;wuW$FyaQU`dlI*SNd zt2{EVik`M(;nbqLA)mTpe09{)B7RDQ#RiYekP*%cD6)L6GWVfBr#nQLOs8ONKI0iE zDJ3)m1QSHQ#G^ahDA)ZTn#j$`-$*IH_xa=&tR)^g5NK3rw&veC+2Fl1U7E5zROz}6 zV5PT$=}EFNII?k`fHhIO+6XP4%OR0=te|8#WlbLOC03j9#@sD}(nL10DlLrNJBfmB zx^llXVJh3cb}Udw+5y^AIP+Z@E8Ko?@6W-NKV{pT8DjIc(6Aaa{ZmZL66eLIEi+F`|?JE2FBZsIZk%*rk{$P__+TvpbD1nVOqDM z2K4J&kJksEyFpOZ?Y`=iJ6@1$DfBbCAL83FeTBK#M{| z%PB1=h@F7xXgA>!v6}>275}p2%fAJ?Rk_E&PD$rEW76-R+@A5~hxv~&izpTi9vWs# zyyh09_{4w$@KP{-!VvlrdS3R>n*i8R{coE2QK?}|?MMo^5>aCbvn@+yDoFOhcJNKB zh-Q_>aPte#uRRJY;EZnK zM*?-A5!9w&&G;{n&B&(jB^wOWTX_{(I(licCVXBuMgl)D{~Bfb*r}4@_hT#T?w=l= z*-aOnRbDHzO)=M{cVS?g@-w2?x|#*EKOd;t18 z@ji-1`39t{5aGmC|9ThacgYhCwnnK*Uw0%MwfPBal5&3n3=_g@DpUTrIduEk&449Q z=k|x`R4hi^fYsIVkNus9Y?U#TFgDIXr>UkP&0@lx{ZU+=2aI*73FNO5u|TxJ4!j`7 zb9!`JQtoaV`$(0kEA)23eG^a`0@0{vK_$JHoPNY|c(G823 z54=V>SP@O6Ho>>^lm;$B1RNBDCJInf%=BI*^`RUgPmiMssPi(8gwC|H8-#akZ+`Jp zus`U$D#0EG9S*)t^lW3BJw2=aLL5?$``sa0axZEHbgk6ods(!3~=JAR#m}xKAF_+$x zSh6TiKLx*yZfm~!!PRA)DFePVhm4?603VNY-5`j?!SLc{qYmSxdE<5wkF@RGK1R8O zT!d$zw>F`b(^GpGr5B)F9zdH#537b4h3GE0Tbjg+y+jd$%RQa$^t*}nqg_fij{chIIWn~=S1rx=31Hhe@tsYpaMAGLoEVq1Wy_nC|p^BPv7xVIdxuIaTqE&#fOnMR4tcBsNk@$kZd5se^7i%p zV%g*F@}to19dUgvB0V2M6d}en8$J{j(-Z#e1RQgZe z6vy@n6E&=J$@4jXRL}xn5$RYiT3PR3ExtNGWD>sE}^qX%!J9D-08X1?3>0ge!Qgoi%*;p zvz;fGcf&k^;KE!1-nZkSrw90D0gCfcU0n)dOdffQ@OCu4)0gM|(BUiL-@lIzS28-z z+X!4#jl6ZlB@|zw)A4JDdCct3J=M6hxW^&XOpDKp27pytA+~%pGP*RrMcUnzzIpo< z)$Q6~*&N#1XiK8{@|76QfrzLh8ux?^h^IDCIJ0x8^8r?UYUpeDBTPzl=cvRQtxL3V z!{y$5#DjTwO=$hIacB z`PbEOroGv4)%3|NAI{Q_@SA!l6Y%0(Q}PZjA=1l=s=olv19Z%dbv%O^o40x~Y9N!G z$DoB^VR-o2bvI7uh74t*eY(dBJSC{?;b=;-p1+zZ^>ouK!(l#}3`p2>zZn@55(Fy!I*0A9I zM@>npX~Ol>?l)~d6LzfbIb=vVQjDDOtq0 zU?ky1L8ROLUEa7{k4x-oFRnx10=JSLkWXO~F09vLA}R}rW9r5qj!KJt#rM~u^G=kA zk(&6!f@0b7qUou;)JvmTl->R&@#p=D1(x%{=os!<-09CX&I~K*IAQL0Vv7S_Ev#T| zJ3j(t$FpJN?FMbQ&27zi)fak9zpM1AMwv5eLxcHNGajDtPLxWQnzu7XsCf!mNmHb? zTA42^OA;3~(>pTUUXuiF_Z3X3Tl*P=i`3mLrb4bjL{roqLCX8@s@{R}O0`zxK~#ZW zC*65@;9&~fi;5D5Jc@xJPF%}d3?I4;3xgpjHsnT7a#th%j0>@Q9x(0s0DXNBA8zNZ zKkZKYrB5~EH({=hXMG}M&F(Bu$Tfgr8gp0Ok?a*h@d@z041hHG+}kTd*XqWu*zTnq zb6FKqvBKYv z+3bOIxq<+Dgy?X8LQ}vpC(c6GWYfXdQcV$@rYs(36wGH*zv7n>;2cY@+zE2id_8BKw-5Gq?U>=RxV5@R~xY>(FY znM|DXzKbS6-j{G!M!wnCV}LSCKqn<;AM(5lzbW9#!^_>eXLz@301y>_>@LP{v{%+7 zs6=kce7OCiX|ru2YF(bg7kQH)UBdunXikpd%zW{+=qA0ZBZWA!KwuB)G@;DtcnE~A zaOlPQ*ttpxq0sEB+~x$&X+{w6c88C~4$}#O^8Z5-uFxzXB`z2MiQO~gqGz;^9VRCb zjhsBS{$V2yID`LfC;p#oFDq~ujK%^lAMO9A3N3FkIW2^_1tPedB2A%sMdKiUh-C|S zXxxtt+3v1A0#c&?wZr{an)Lt2Z@3ch4;&YXUD!U}o9bffIK-^ z^RzW!9}N_biwOdi0$rfL^Wc)_`vx)uhPdRA|E1(x$Xy-yDe%Aknackso9yqj{(t|! zO;Ic#TP}xv8)EPCFkt#H{W&z*X`^7i{FaMr)c!R&;dv*j9ZEWN*1Va4J+$cJEknFvEI++t5x`zQo5pVT+xFx~ zQnCh`k<6k=P<|`pP&_6Z6!~C88qj$NWkBCrJCQ$t^MkXq50=gOGU=~6O`^XmmdxBn zc?hvyjDSm%CHs$>lm`al|3`P{8PwF;zWYQJ5UHVelnzEjL68=tiikl#A|OGfg9PcF z0Ma4!BB6wUbTV zpU;JfPV(g*+WhpKtC#z|bwSz*fr$aQH&&@RLM}yAL(!3?)bir`PS+#e)(>l28_CZy zr(zT*;W-*9A4byCwQAUTZUWz1(QgPq-$VgkRFLEi-E~G%glwn#@~1<1H&pE=+<{bToseL;y}-|?%uo*cR) z*P=2|!O0AzaVqk!CiG`iYtYx#E3kZ!)vM7hJE>HGPTx#*Z3kBAw$}8z&lC5#@(>!FFQT+iiJ!h3Gxm%I0Nh%Y zv6gCjW%$#=W{ebsw!KfkWc-O&q6U3{%DB~V;yo4~WE^AW_RjzGrV0PsW|rSr<1 z)mv?zRFErQ`(HLqr!39nL7e-bygP%_DxYIo5k@8Yz&N+j5SU)L=#cD^lId<$b?}na zqna`L_^e$zB-x=nfpeO+Uun#qt9d=U-2XAZi5XqtgqGsopv(m;8yCO#wnFCsw=$3f z1MEXooN8smS^9Q(Xd%W$BnoG&>zm)T2^y>psK?rtETs&!citN?aYq17xty>cWzFDz zAr6#6eLlVngYMB6qP$m^xtHvhy?!pJ%x*|%rrgH1evc!8N#>h$6j zC?UssE!E+-O`(8B@ZZnU?1&PLCWzk?rykJPc5ENL-9{}4;D5rKF@0*#%sOQ};}RW~ z)K9f{DK^gg_*2G}-VQ%m35SP+D7}xv-Ew>Qu`j>m5_PZ4Qw3Omv0}wiO|Ct7{sfs# z`PF|V+^y-AA>ml@zS*O;k=DuFjzrh~+$U0L;%hHp3GDKuK5q0H}9>r;EBIKDiZ$u^nPAQ1#`U zly@DK>kgUOlIXYWXf8Zg8gN#DB7Jb{~5KLv^h;QjMua4mjqz%Pg>-E)>wP~s+S7;&opps z9H zLCwsNgzVtX64wF&{KGj10GuV$2;zFmw%0C=$2k*<MNiq(8`k%*Z4R73_C8sj9`z&Io{LVp4k_&15K?PA}a zc&fj>PDvTQ8}N(AC*7uKV44AZ1X?S=|A`+cD3Xe`qy2LCL$8#wJK7uU_0{(#6lQ00 zkA)^Bl0xb53Lv-lxKfYns4qsZh&D|6YbAd7%XF=kg@Lz;-&LKL%W>^L#sbiMvaOW1 zK5^LKWd|Ai=eG;9^T;yoPT!PSsDM!^jwD9zMrzsNqLR$I;awf@o(d|UsxWNE4fVo8jmUXIE&STZDUt7;1MZWWiUY`9Y- zHwgh1o*&$L8a%&ySQngq3LbQh{)7~r*~B^PRlT;i@bz>Re7dJah_(d~3+4oqB8hAY z(5z(9t7@+{v8T;^qEjVVl0QhCi5Oj0>5*OWE-xh7=FP>(?dN-%D|pkG9mo-h(H6kN zp7ZzPbyI^gY{Y2AKcLb3_(t?99RNG7_ju|`e3(Wy&z^s9H}PdfYDN(Vkv`YOn3kk$ z5U_CQA5cZ8F-T#_e|n@$=Wa=dumk2m{@CW znPc$d{I)aIU?BEzu0GO4d4(%MDx$n zj8mbCM%$34igs%pVZ1s#HKFhUNO@ao4b}F(hL~%H>i7eFG1%rG5CH=l(374y&~;Ol zEhrWs8c7kJK(qrKbzmYp-zWy2K9va*^gke}{?9KpKlzp9^)#t}I~3?3Vq{`DD|F1n zasCQ2^$)`(aMnTa6g2l{kawDOg@KG6>uoA)qe-Z)0uzR|Oh^;w8k!GlzQ$iybppvR z&ZjM*JR3A-cxP8W7N;#A*L)D+ou*#!ef6$;^!2qU<529NBYIFm2EX}i@X9#HPEIwO zP#mO4vsdC9el9T*LE-JYf(Nec)+A9#L{P5sG*d9pXhPJ;MA1F@bJhhODnEPNJ6hr- z6Fl4!q4NINV9tcbQ{xrFEi>g{Ed5GD`0TN_3aR2+GQDB9ED2cPo`)K_GaNJke27Zl`0umDzmD2qhpaEz&>*#1*sa~x z7Lq7U!1K}9S|Z1^pG7a@VP{V~jQ<;@3PYT3*)Wnb%Id!mmVQcJjMLxy8BMdwmZna0 z6#2Z3J3`DGdC$BW@b|k5YeFZroMy;5eDo>53!S=?PwC4^0!@HxX+e>9j`Uko$)|%Z zT7~at!lt@l67*Zodc&t^=stV@_pZJo!ovQML(<>HGOqF`Jb2@<*3-N%Sct0j<@*ED zRvm%`njX~k5YZX*pqI34Qp@yT1!I#)MT@*gLOdnq;g&3tl&V|xb2_K1Lh(~G4vQ9Q z!A%O|(B>wIsP$i)PtP$XX6Fg~LtOqiAQvyRu*$yo??*c75C=~lND5>nQPS%22GSb4?ru9Phw~V4 zyXksu>~_GW#`VtL@jF{w?HmU&F@U5YU?Budl7S;*KTV zEr9^qc9|J$|Cb;mUV-U{QwCD6eb_NUH^`qidtH5F*nQAFj!whk2{8kcObm32`#uCcvla9 zCU7wW{MI){LdsE+$dS(b+zvS+T`C{X6=dUw@#;0+RWgW}7C8R2b!m=ZK&H2lp*vUGG)Vl=2cv`Lp8(kJ^OD z>idFQysiOJgfX^lykHJT!-Z90VIKAgmaKlP6D@bx-jz|KT1=>OK2^^`i2#uF!ng>a z-AWf9qt@jTW#Dj;5vKEITdIyryyko6nW0Hq%?&%gny5Gb>_6VYsX(7*)=pB-27v5! zR|9uY9@Ivfj zoZ*KAQ!c4W4yZts_C+v5KpG|1>G(yn1;PT~;uCN$gLuYK53G>me_d8IyVQ%~B#M;# zizJTPyTYEkG^UijC@2@BstDxnfz=+HNy*8$N%X7b7|ZBfe_MW-j__OIO0h4E+j4sX z&-jYJhQH2pM5e{QDdpA)LzB!%Imc%mWA2+ms&4)P1p}oen zSdRF~^TRRfaIRs((Z=VehOZxG@n&3F3D!GUhcz8{(vo_A*`Ht58h%|%u>Qnv<1*)2 z8HT*nNs-7~aM98|H1%Mi|8#mv0zif;$K~J5Eldq3d6|x`I$me0+^R(;)Om-all0hV z0hS#t8Q!$Y{MyqiZ=Y`b4xdY=2h9M{9oo@kXcWDh2 zQ^(!H43VimZPDaY%|_5gJ+~>-+r_(*Ef&tN)6%XYh0CPMlOKPG!d$kQ!Kyo8o7WMS z7RQ@aij+~B;>=zZ?b%ooT*#~Y;*9MMB0ofF>n`cTtMuGnx_3M6D)5dFGwL-^q{p|` zDU!8f$NiCZCh6}(R|mu7!`GmZu0(AMHBajNSGui~&mQCHNaS-eX-qZ``^CSL1{u0gWUQN{JZIlbD)=Cqni1zBu^TZb}5}73s~6 zZ7`H^_#m3PXYJ-nN6M2o3w=D7IK$b<0b?pX0C`OXLwB#H^*IR6#)IFIR83dqmQIhW z->3aT=$-i|YfxbMOP2xp@86WJ5T{yyqse9QHKy`ir}P6fD^hnTSBc)soN=%53TK%3 z#%l`K5SrIJ{86iwY1O=;g3|XXE`@sCFlOAyWGONa+(B@HEYqCr7}L}A*3NmvsAXNC+?XlIR`!xbFaKMW@xT24h%n8ATVg+{C?DR`{SJ1;NjKbmWJnh z-YNt}Riy_5I*mOTku8PC8B7gxpL%*f15Bz@enD!Hk5*v9(n^WnDTOJ|Zl5rUH)=4! z44v539Ix=_0|uuy2b##-P)9@D+C5%tJK~5pW7oSE>Qgf<|IU@BJusgXe=wr%C_8g+ zFze(KC4beCox4T*<>U6CAL?+S^+JZCFE?|>{Bg4UX8+$vW-Yd@SF{~sVB7WLapSDm z%q!*>$A8b|d~+|!3wg-_pa`E?Qkd(DF-NA_d*$PLGvI03_|SY$+O~9|P4Snh!AQu>Hire0GvO_%MhZJV zECrja!!i=ypK5(kK3K@Mu%o*P2TpZViky1~SXOV6fNqc3o?$e9zeoL3wW8-2Ce;cS z%Kw16n~HyCa&HvQGpb~%6_?Gm0qT}MeM4i8FAt0ltr-q)OKEoCxO`gxXzy!$I4LyE zk)t|FR}6$ntRJc*UT7A*=0jD^BK#UI_?@JwK5FT~6w#-rFoRQmo%U5pU#!|HGbf$v zUdFL<2OwILiGdw)23NdAbbRgRKWO^$Edu~l@)8g+>S%};UgNRx`S8%lcb|lmVu2iPzcCbJ zlA&bbJAiK$Kq#wY@|$ndYrB4>vbBUQ_p7$ ziazIj3iu+R47&se_+-Ub<2ArK0&5X`0kunhHCE{G0QLjUUSk9h}52noy*l1 z_l?7$YiUMpRF~{gUa_YraG<=@xJ8ZEbi>vbUDBGR^UHoL);4^WTr3Ew+ZMW?y<>}0 zrbs&O4q?My{}=<8Y=k_OHR#>G$D4jALi}k8^j(9RUL!4{LVqDx0;j}s9l3zjz9uxO zU&}2a5;|D$LfV{jpx-r-6CS<_kTdy$wrKb&!19je^4eY3LKmRUeG5y=o>R{sWR6jf zL|`3hr2~lhPZg`jb$jqjaA|(Fk`5Jf6A^MA4T(@vg-!6BZ+jSTAMb$U^Z*B8(ug5 vQOU0TtCIF_>e~Ou_kd;)V^Cl;4{*-E!)TdAXcHv60)YHMM}83c&zJuJb|osk literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-5_hu_ff0855e8e831ff82.jpg b/resources/_gen/images/images/blog/blog-5_hu_ff0855e8e831ff82.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed295a908a7a0f5f40fa18b3e2385116e5696658 GIT binary patch literal 680 zcmex=Nsy6Qkn#T!#zhPajI4}czyJk|Ow25-Z0sDIT-*W-OpMITOf1Z-tSl@*m9;=Q z1{Oh9Aw@$+HsQcTcBMiQqsEB~Ih36?9uy6__(8=usi=vQOH5osQc6`#T|-mL#MI2( z!qUpw#nsK-!_zA`Bs45MA~GsDB{eNQBQvYGq_nKOqOz*FrM0cSqqA$$ z3M&~ka)>xhT)6Qdr?PR-2hpUWi(FzVCJ$9Vg1iLw5pf=BBFjf`55fKO{}uxeGb1p< zm<1W^8BUx$e$Rfc^z6;@=Nc9>yp#8;KfT*tmBF|;{k{CTp2=6{pPT!s@sIpeMUDF1 zKcyJbSXH%?ZGr+=j{G^iR?*@d=hp>)A3B%+3Sdg#Z*pc<;maSv8VpO1ifm#0e-i*r CgfhAS literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_49f98f56b956af12.webp b/resources/_gen/images/images/blog/blog-6_hu_49f98f56b956af12.webp new file mode 100644 index 0000000000000000000000000000000000000000..69a07f25f6cd0e6e36dfb6b5843a51b9575974a5 GIT binary patch literal 27916 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
^H3_%=OXUhLfpvP_P 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

!AL1^mE+tW$`2E`Tqdp*3kDc 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_738eea9b9eff29e3.webp b/resources/_gen/images/images/blog/blog-6_hu_738eea9b9eff29e3.webp new file mode 100644 index 0000000000000000000000000000000000000000..fe6a6dd0f05682ea1292dc9ba20c6823b10271e3 GIT binary patch literal 23210 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_7bbe789ce9360bd3.jpg b/resources/_gen/images/images/blog/blog-6_hu_7bbe789ce9360bd3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b9502203216a32e4d7a6f5c20398f976fa98c23 GIT binary patch literal 666 zcmex=Nsy6Qkn#T!#zhPajI4}czyJk|Ow25-Z0sDIT-*W-OpMITOf1Z-tSl@*m9;=Q z1{Oh9Aw@$+HsQcTcBMiQqsEB~Ih36?9uy6__(8=usi=vQOH5osQc6`#T|-mL#MI2( z!qUpw#nsK-!_zA`Bs45MA~GsDB{eNQBQvYGq_nKOqOz*FrM0cSqqA$$ z3M&~ka)>xhT)6Qdr?PR-2hpUWi(FzVCJ$9Vg1iLw5pf=BBFjf`55fKO{}uxeGb1p< zm<1W^8BXSf&FnMwXPYbCF=JBKzlJXha@yuC@7nln%k9Q|iSOT6q)kjY7{d9+elC-= nE7P>bp0gIR_ci~#obu%NqXubLT~#I#nc(gGUa2CC|8D{S?MN#7 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_893ea71c11c7bac.webp b/resources/_gen/images/images/blog/blog-6_hu_893ea71c11c7bac.webp new file mode 100644 index 0000000000000000000000000000000000000000..647394401d1f97a7f819cdf459d90c98f4ec9795 GIT binary patch literal 352 zcmV-m0iXU-Nk&Fk0RRA3MM6+kP&gn=0RRBd2LPP`DkuOS06$TBs!J#%p_;4)0D~0- z@&IMTK?MJ1lwMfTAU;=y!n;8^d81x#5cVEhjA!Fz4-Gpm{y|rJYb)wPED!+xvN64y z>8_@%C-ACL$CeTQCTcNI&H&MI*n9P%Wmu25-q<3RKOOa~f{NdNKYG6u_nlX^-{sFr z@bJ~PT;P-wakp&e`x)gs`_ZvUP}p3@%VTljSynS-P-{~eaWN40OCkd*`MMkZU?P<) zB7OQ4tWQ#TMeya4Z|dlMGpD?umAm{=K;IdEKFPq4X?XIc`37SEs1?BB`!xbmad7`A z1;zXhvqABy1E;LpVceC;=x#lMG8svo(0}GR^o0hH>;-%fbvGby1Hau)o*Da^`F{>{at20092=U}snAuRebI z{N?Mn?>~P2Vq{>3cn3&AJcQ&QL7;z_SXh`@*g^hbWGV+@WL#n!)IV7ZIoJzcCJ^Bk%Il3X%(EV(<`dlt7(Ys8g> jXC1a`EGQCun$@vWZO&gUWyhIH8<*#;xHR8E{{Kw?SNY$E literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_9ccf72e728cddc4f.webp b/resources/_gen/images/images/blog/blog-6_hu_9ccf72e728cddc4f.webp new file mode 100644 index 0000000000000000000000000000000000000000..06e1e5261cbe4932f58f09072bbd3754300988d2 GIT binary patch literal 136 zcmV;30C)dVNk&G100012MM6+kP&goT0000`1pu7^DkuOS06uLdj6)(J4y~F15rblS zKr#6Ro*&Vw%$N3epL!}i^d&!IM@t>?H5c0sieW>h4q00012dN_mt literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_a7e61da859c97057.webp b/resources/_gen/images/images/blog/blog-6_hu_a7e61da859c97057.webp new file mode 100644 index 0000000000000000000000000000000000000000..49f09bf4285185a90e6733db39cfee8f80362038 GIT binary patch literal 46124 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�=8zI5>4SnO+~_+&fp8l1b9SET$88o+kAd_)jVc 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 IhDQJZ0NS+H%>V!Z literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_b448f44c73a1e092.webp b/resources/_gen/images/images/blog/blog-6_hu_b448f44c73a1e092.webp new file mode 100644 index 0000000000000000000000000000000000000000..ef0bdfa620b49b9f3ed2408ff265ff3d9c6bceed GIT binary patch literal 17956 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_c559f46af58d7b01.jpg b/resources/_gen/images/images/blog/blog-6_hu_c559f46af58d7b01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c2e01acb03396d09af3b42a4c64acdb6a2d2da3 GIT binary patch literal 36516 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 z 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 ZN}2>+3br_ead!h{(+*5X=JEf(2>^Ms=A{4t literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_d23672e5db64057a.webp b/resources/_gen/images/images/blog/blog-6_hu_d23672e5db64057a.webp new file mode 100644 index 0000000000000000000000000000000000000000..8d828471e12177df1c252b563ecd50a1f6b20385 GIT binary patch literal 120 zcmV-;0EholNk&F+00012MM6+kP&goD0002c1OS}@DkuOH06$TPvP&o=q8h9O0D~0- z@_+yzNoGg{&vbm~YZ`^3R?d1Eo=^b(%f4laeg`RJlEG!*0QR3WNpS}B7J{V ako}g;wf7c<;sG#V;nw;xKt4gus*I!FyQ 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-6_hu_f695abdc0daeefc5.webp b/resources/_gen/images/images/blog/blog-6_hu_f695abdc0daeefc5.webp new file mode 100644 index 0000000000000000000000000000000000000000..0b57554020e9c315f8fa2f79d91cfbdb675cf7af GIT binary patch literal 25840 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 Cn2Y!T literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-7_hu_1a7d4db8515e34fb.webp b/resources/_gen/images/images/blog/blog-7_hu_1a7d4db8515e34fb.webp new file mode 100644 index 0000000000000000000000000000000000000000..f966696deeb01ed9e60ef9800306b989422910e6 GIT binary patch literal 204 zcmV;-05ktmNk&G*00012MM6+kP&gpC0000m1^}G_DkuOK06$rPxJ{`eqMP3e*}ZB{s+6+0o%CjHc%}l;)D>c(5Z^X1+J2qP-3LnCiM9D{AR>KI^DWXz*>V=# z396^{wH!olDgToB{!|R}BF~^ks7BVsW$sFd#u>+*D`LTdv^$N=Q}2*0^^Z`SKctdR GfB*m=UtBN% literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-7_hu_28ba032f81e9e9a4.webp b/resources/_gen/images/images/blog/blog-7_hu_28ba032f81e9e9a4.webp new file mode 100644 index 0000000000000000000000000000000000000000..07bcf0f7efd7899a5defe0bc25cfe50e00c846e0 GIT binary patch literal 118 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


0uc|a zb$85n^|FB*-vqp+WQ4Ksm0oU=X^ zMh^Hs0jHz*(_8nFDHMWDsTs0;Cvd)MkQ&>r{DnP~ewjt2v$!J`N+Wy*q2o SLnFJi>Elmnjv$!7#(w~ybZQ6y literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-7_hu_3c4ad455eb02f8ec.jpg b/resources/_gen/images/images/blog/blog-7_hu_3c4ad455eb02f8ec.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d349259eed5bb92e403fce53e0d10313f74f103b GIT binary patch literal 34888 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

Zi9g1l=KF021>TRT2;Q;8!TGeDU*@K`3Gh z7)V1<(2KC?6`43r)UcTY=v#Q5sY}Sq5q-mgG;duTrU0r>SXty zhI-=Q=TP^eD3wk27{OhCsN495x)fXLm+AOJnZNo$^QCvWrV!P4G57+7kb7(n9*C}U zEgTIVOyf?$NhWvf$el6uQredu-7F+-sh^+NKH4p~$frpGSyBdX`ndvXk3n`;3cUP* zqWJb{qK?~P2uEg;A5Nh-pb-Vu*Sqh0Lj# z(C`*N7r6;zFHAjhwW?lHuAAe5<&w=q%CX3Ts8-n}`wepA)1PE(KSEhPTd3pqw`ax% zgh3}lpo)Ky`*SjzOHjQy$^(lCu*gjlW({$S0J(tZgLsF<`vAqWPT?VE;Efx^#vH%%u!=iRJ{S7Eu`4lFlr90#*YHm5vPTf* z7nAv)T^?^Vbh;ct);ZQs~?JupK#!K=d_|JnKwAn(im z;dVQk($xXVeRuVqTZqDTe%-LUEE82hTtx^~ns;4OFeQ|=pSG%hw-73m~zSd-iFbL8+%^d2eh5YV#Try&;1MA=gl zh26Ag?JHkg7`ZJqtmKKWg4&4F8gq~sAW&lY6}~_FDY43`QrJ|f z%o1|uM({R_f3N(0uXSP0wbtCPnl7$Uf@dNPFKbw@Y?nSL zjyRS+XBivq#lY`oVE5Bk$L$1&r8q~UC=BiSH2PZ4&Q0#^*Be*c?KiCuLo@a813SeX zKpn8g3=*bw>Ocq`b-}4WXQWBa_3lMjVCafC4Kc5>4%-s}mSE62ObL|fG2^HhSYRjR z$JJsYQ{=}B5#{u}nIplgmkNtjij346j9#5X_STdXai6M36h#tD?7j!Z!x#4PPAt~u zJ6qy=69dG*r5+v{u5&NgCC5dL)F?u&_eUk$^NaC{#**(&CCAH@?W-v#67=nLkbY1b zW}D>r#$ZNY#?3;z7r!C&tj9EbJC2eTZ+0?L9j^bk*cdzW6z6d9B30jY zi%wRMf{$Yqj-!?Yf)ia~kaw?Pz1I#;r-yQy8v;WXN#S6xXkj zgZG{<+Uxhw4zW>RfNtbpL0^Rn8sf*qZa zZ>=~9df7R#ynz~PkRED)QEFoz!JaB<#tp}#aNAcyUD8O_rw=XU$Z!f;qsbFDvQ}_4n z_Yk8sH+wwi@=zva?@3`VDjs|~zhm=dkTyjyu*{D~Bkh5FN9~SR#tBmWzK&`EwznH;#V-zbC+yglGV;{{&77tp;)qnFF>Ddhi!47?yyn3CrvNq z1IR6=;;|0wX5)qjdf&cdhqd|rHzzmxVrNFR?B1F(?sMo!s`U`lvEC!B`pVGldsEyy z2ztV3jSU?au3;oFr{-KSnLA`nlsm|7;Zkk0*e5yimGto3&BQm#NvyMlh)wOE^e;%m z*pIIsY&s@eRMaGYH9c0H{raVT`=x&ls0`9K@B~~gZuMfI2L}|<#N%_;VI)X{b?7Lo zbRFi|H-&D9TiZ8C1cqutXJ>wd);(5hsybyhy&O;BwtpZ@+9tAfIQp(Tnc>@SHA$b1 z=PTuXqxm)Ehs!=5MqIY_>|kPb;uD9313P!aXD_aDd>RU_ z5v6S|s6fQ1=NahL8Mo#sBFSmk<>a&7^TqfBeJ1a5YJ-!!4WlpG`DR5-&LaNa|1@}C z4x{gVa{hy)K-)N~ko%JK^__P#Q~~gat=os48p3!u63BL2~OU24|W}f{Andmaps0_ z;9?Dx4OOK>dR3<-2b6E&!XCU3>2wXhhN~6H@?3{qMrA)j$)g^>ixHhgO%Zqk+hxVN zv=r@~1C%2@1o<2U-7KKv+*ixXU9UpOW;o}R8%}kx2H%_5-SDNU25*)5n!VT#i}XyP zLxZ{Po^Kb!>*8dY-b74^ejI!DotMxM{`7)XZnLFTq?Jdd*WSvw2cyWUK1hB>;KsAC zw{t*N`4l+CK(sHd%KQVmsFahWf`xcFxr?Bt4ISnWXB*<0?RrUL=ubhKBErJV=<~c# z;Lpe?ba5fY=OneL+GBR=&3Hv*|F z^Alqt0s~A{pel8Q@Yy&fxj{(wTg4G}9-!X08sU*YF8z#5ZQ7RKk|IJ?W7WmZ!ECY> zOEuomGav)pL)=_BlvqFXWlvQz=*^iEi4n#?g+OVeS+JVaIi+JO?^*MOJ~5rQ3%>8`y;Oz( zju3!)kw31wqUT1@U$ITg#5Dm6T%RXoSM9-g2Ua5)fNER%I!xXc?XWL=VbpA9XVesJ zcM$qFe{}>$o^_v>dm5)y{DyzDc4m)!%b|nU=R;CxTwX>b&8sHTant95OnSrXPg@w` zpEzf@S@V0k4!re0>M*5IcN>}Z6(1CHGf3Nm875vOtKKtSAgI!7w?$P)X|eW*12dT# zpBciagS?uJP;IDYl;q=9i#StkH_lN+_~N)~q?xMZaMx37QaiAJ*zvu25)otbmJD~E zHQ^BLOi@fq-)32h?f2cW3zWh9$vj8|qwbiTrrxxwVE*y*p*3(K%GNQXP@@=axdDq3 zVY52xCXv(ILP9VvjmbMr-n#A1bUFAs10I-2CwzClwMZ9a%^@qT^e(Vd*e89BVdR*g z!~K2Dq!M(f?1?#~*x;#c_t^fq!5MtRX#&Kzb9E$a;s`DH9yC9U`P_~m>s*7x8MyCW zfrXrtRRzvMhB7S&H!N?gId~^yhKrh^^w%(P&Msy?Q`h~CH;_t(O=S$preS+EqI8U| z-8XNkUYo(ZpvYEI)HnH#@oVHIV$1bK8%#JP$IK-^ zQa*m9)C0@&{9zBED+#GhL(Ax z{q>bA+lk4LEYubMwzt<-xzOa!Mp^oKl{NFuQAxT)@_4{r6~nU?R?p6F)ZLshd%}2Q z_5Ve5^zWgkzyDnL*}tJF!mns5@=wqd_08Olf)NQE2~ONjjFYxxBN}+ zv)F2^IKE9=4C!y13?RbV;rk6kOIO z804>?6)v@rs)iQTkv3-X)_a_eucxwC@eNl(9XEpfLYU7u2iH{o8b`^%qz}S`()+_c zn23#uWH|x7tSJi5cUSer2;YF3m$w*wf+3!+-EOwQz$ckP>iG76voL@39{^F}0`3ov zYL}qv<86ehk52G1&DM^n3w@nOafRQW0U|)H>z1ptM?GAeU8j_H=ye91#7+r_ra#Jf zV}2>z^td#vG}HNhMfI$ub5g;`FiB{ey+Yp*x-hO5$2_f0&Yk^)E4|Z&6{btey2V+p z%`vXi6)Yv|{7zsW${iX_4fi=--{``w|4r}I2HDX2FJQvL<{yy%!}Bb|`hdUv8(50| zH?Rcz!L;+qI+t$x;{@Lone!)e-y4P19QE8>Bi$|d_%WLVRbTVAemt%s7fZqd@O)aF zb=#plPi{~7p*J)0I>?j?N-*dA%Rz32d55aFYjIC{zenbv%tMwT?X`xFRyQPHT1C%uhvnAGm^hk z=(ZD$_qNWYv?B)@22xqug_Ndvd3&qh{m7od5O9ShxgOd6=I!a>dRG^|iJpVc9wW9N z=HR9PKf%NQXV66$N3s@hS#EcA6_yl?U;6B%UIs4u@4QqHa;MX-@Kco+;u?Y!jUq-> zJk2nhDT!LayS2JVR9o*#<|atfuE#P@<&w{pUR3K4`W5qR0mLXG$2lJ{Bkc{vRhA# zTG6004WuFlK}v83H}|D;;HJ?W;ra4N66~VCLgV9QVy9}fw6u4~2OvAah-q2l!7c^f z=wHZqVF&cnjQU$w5*p1JXZ-VA+6Y+zN!6$^^gw0386?3>ysgo{_e4E=U!z@}T@6RZ zO-IO9k!^iMTf|z`yZ)H}DYr)qzFt$=wc1r=+!;rKNq zyCI~rxmuFSyS-M#?fL(Yh;9A{3Pz;<1m0jWKyk(2ppYlW$uv;jr3y)c)Zr~m4@j3~ z&JAc>hrP@TOtlgjKI03`pAEG4cC%vR4937d!Z3~{-8a*d%>o&*6p+?|G4C^8(llvp z_))e|k<)TzkC;zt75RA-{mKceVNX`ywCX&3tiS5|m{3{kqITVmrzI5}2kO%N3+|#u3ZF}JXiVhzP#nKEqjvI!=%Dqv z_ahSPurwcH`!mCb`FYf`2V}BRgr3aDZSb|VU){|~iTPVzSX8!6i*U|Y-?2VFw(fqk zB1W@zxoUZwuD^i~LGcD3!ek)%wJcmGM0jRccoL`Zl&d1T?gcOA z`7^86h|Zcv+(%mWdt%Eys6zvtC#0TKDGlGWZb$U*C85`0&aP|9mVF$=nmJ`6`y_S@ zIcRa7Nq#$qq(YbBQw`5$vDpO6|;C_9^c>UF7=`(Drh0IM9sro*SB?Hv(pvtv|k5RsOD6=Du{UJ~ht6 zWQ<|Dzy0)*!Q)!I!rQyAGZa!_%g7*!qml#(e@zBmN=)d{4^fUhK+wuSyU%E8uu6zw z&2&@^_blyO@s4tld@XM0_8FV9IA>`S zw#9beAZ!M+JsXm^|4*S4IG#QK7G-(6%-w>F%=g(vSpVjBR=(z>;_*-OL-24SJ2 zXdQMhNSlH#iU?)ItKB_*v)Zv%TdtU{A8~8NPlU-R-w{tzJN+D)P#hQ>*qVVvXdP=n zdjU$uPAb8`4C*WZ%Z_OD4HSuxbc0a@ zp#j~y52*1YSDq}(i?6Zi3AOjNMd`gS?cK{PGM&dKnA_t~%Sf`Wwrp1f_n^_FEgu`h z)KFa(auppsrJUTZ8GbQDGY-g;pYJFZ!mFB;Ruw*}ciS3nE|a?)LZw8iXkDSopfA6F za(;)NXdC+)3}?yd9y~?87+}QS>0Nt!wML@ihM{+N+eY6cMWDH8YV)B~qDyBT=6?AQ z;pGPK?eEMs>LJi*q>JSZrP>ZF{|oxUA{wlN$9Ap|_b}ICvVfs5ZL~p-MbO7#UtxDA9<0!@#f9{eqR6bW#Nc#QGY!^Z zS_WBSbSq8o_v|6v$-=sV&*&k!t+oQ}LmZjZJ7aX$$X!mMj$VnCF*~Og51xFFF@rZ8 zH%0&hTC7;7x^*3P$J+bWsRPe4V)DO_jl^nS3qVcfDVkP*<8=Jk0x3Hx?~CcnX$7Me zfQ29lC5+347FfKCvn(>b{d=rTeujXcl8n-Y~KASkYoU3Em9rl zWinmNOf0=W_8C=19h9AqYeD%=6#H(YNY^0sC6>mm%w%+=nj5K@v@-desX2Yl#-Njm z6O`C_f4_;O?pwR}V}(y|P~dWK;yxoe3u#+?rC?kaWm%3Oqivv)nl}~6xpF&aR^pcW z3D?w=v*VXykFbDI7=?Ew7}CO%U80Nl#ow=htj~qW4Q@I6YF`g#{PW}jsevjS-6E#P z3#-}W68DkJF8IhqBu%Dz$@W-9q4IWuq{uD*4YBgeL;P37B{bnzBBLZrvm$yons+!oi)ElYL#_( zq~=KeAU;D=b3Kh%l0@9%cn7E~uu8|ZSNpBQa1ue>E>i_YqM>Ox3brt6iN- zQ|R{6)F>^EoxLRYz<$GCzbmdxmyxYd*c^q;Ec&%AF9gxFW(H+htp#Z1h6QXI!wVX1 zV%}*vpEQ$SpJ}I_Sn-I@8*B~Vi3Dh2Ws%FV{G}!B8?)<>1Fa&G-XxPgq)q(rsP@tp zoqP1CDI7Ino;2-{3~>cPCx2;f+%N5b>qAo7Lr}N{Zm}Jd0Q|R?xfEJYg(6p|kF-h$ zq5rQ#we6SRUB!jVZZ_g&8VsF@oykuUGkQvvA_5Qp%lGwvZ8vOI`v6BEVq7vhwsddd zo@d)lk^AK2Cl{@)aRvB-ic*e3Jna<7GAd2|de^VLMYP*Wb(-t8&wEZj`6Opt+2&iA zW3l(;tC4|ExchEf&y0QuM(6p1r}gQL$DRiB z#s~sc-@hDy3=jbjZiD?LWzy=j$*&hz7XRx11S8ps{Xd=L*5A-0Vc2dhUfQMFz^%a> zkC;#>b?yhUFi)kIh)kC+e>%BDvUGS~Azb*Iv{#nQ|7uwINMOO3fdzBqWo`*cdGCVJ z!N$pulJ}&4z#IbAK7o=Lgg5%P_V};EdFk_FkMTX!zn*|HlJ%G%WAD|5t#k2MQ%m*t zIorXgn=9UCD_QBfZ6nd*4en{)^09xuvj+^ypRYKP49^x5`|P2?@ZnuL&#K+7aCEck z^PEZtJ-_lV*f~Wu-1};;u>@*1{(Q~xZDlJCGU&Wk&hADB0_@=o4@tf;-+b7 zP@|K|x+!dzYacU~9>Jw#gUr=%F7w+~Xxvp`Ta11gGx&14QhJy%&x0Vu_1}moxW6`l zNt!@H;xyBSO59O@mz5f0__|rPzWT~qZ&flRU3vy!65mw_QbGP=R(N?WxQPpL_-BT_ zmR|vb(v#<%Cwd^EF8S!4l;<;8ey!t=JZxy(+#-`M@+uh`{CV@BDpzQg0&EfwPAITt zP&@U_N3UF$0!&?m$}M9)S3B&qisEmDows%sbmdKy6ouVu6cgqHl)b-x65Zxs(4bL! z(O>_oE5PV5tt{d&G)8K!?vArEUr}lqUdDdXu%7=+3GqMbULt{Xt3aO|fJQ(V{T~|3 zoBX+KAQs$ww5yQ7(;hkH-1JY`)Aofj1K3d^J~J@PSwO zFSE{?s~P|L=zq&-+`TzCoYuoSPa_b*A!z^y6u_AdC5MVuIJwJl)I)7#*G;&-c$^Y! z?)5){i};`X50qrRt#p@`QFd0^dsqrz0M*Fe>asB+jSy-pf?g7i19f1v=`s~57V)wE x9P~MkaNVXi)nPNio-ZqBL$El1)Cstm)BkZA5YPXzR^}gNVE=#k9g+2c{{q+K<5mCw literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-7_hu_6d24320dedf899a6.jpg b/resources/_gen/images/images/blog/blog-7_hu_6d24320dedf899a6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc5540f25adf5f255eb6a4ec6eb5770517370cf5 GIT binary patch literal 749 zcmex=nAuRebI z{N?Mn?>~P2Vq{>3cn3&AJcQ&QL7;z_SXh`@*g^hbWGV+@WL#vj&9j!?3i%Lm9mcg9zV~6C%{a@EDcKj$XW5wNg zEAEy5F89pa`ZA8)*yH7#3+xxHV(-stc(%pn)PW0vE!y+FZXH~}VQS%gG>djkPTb48J{Lk<+|Ht+GhxHE^@cn1- VZBcOueLFSo_&cuc4)XtR0sx3$5iVC7=Q#0xAMhBqAUsA|fr)0wN$a0s@LkM?i## zNRtveBGO9`lq$U?)Ii#oea`vMfA+rn-gD0x-~GPvkMU=W#Yo=dUGJQ8%{9w2=Ylp$ z8wZ{M%uI)v4>2(_A7TcBnORtmu(BRL%*w+FVL!spBOt)f!^bBidK@YwEGfdrCoU&0 zc|!W+sgr_G`7`n|XO7F9lwkma!K^H-M_E~q$_ViZ$^6SNS|h;4!r;vq17bJ^Fmf?~ zxEN@y3^@S6aEReAFW_%421XE_Rxrz9R<3~*%V7F<029|CZV5#_ z=A+jfz{k9J&W0ssvq+vVYvR4$kC#%q^YHOuRz7|KL80R(q-9Q?I;X6ns-~`S;iA5Q z;U%NX<~J-Xt!`S|I667sb#Zlb_xADi^G7}k2!9e08TB+eCMo%ON^07Rm+3jVdHHV( z3X9%-EdNwdSyf&0xw)mat-a$*=huP3q2UqS==ZVdnb}`+^9zeh%Y@CX?Va5{;{E{x z0QxIC^uK>)=pXpuqVvPZ!~|jj|Hcmkqd$FsxR?$}C^B>FT?0FK9X)n7jD_cXVs=^6 zVM(Ryc-}h?`&s#<&P^XD{KnE>IQs7~^!VT6=q6z)O9^v()P>M_^+jpM5EQ)0;5)!2)$Pcd}WYGEjvQD?-`hLgXYy55XCm( zNk;2KGaKOGZj5X)F=}=V+-RfMfWz>qcdg; zwUW+QTw69;vga?M4pJe5J8mBGayusHS;jrbO8S{R*0Z0gk!2T9v6F(zlTZE6+NL2m zIN*vmTSwWInx4@BuBDDE+Zcr`$N&lybOGNRzgE`^S$@_lL)u+?p2DdVUy!^b$U9;+ zSNXEY-p#7t-VJAN^Yh}vq}DlW6c_wT&^b!Mud2rr9UYeF2YQDo+4r(kl)5gx!NY2G zp*Q;zZyxMs2W0TqVezY6_LFRm%6Zqhx$lmrfU(MWT#U|{pbLcjAC=eOKbzx7sl8X? zicf1YV%5neK=76p!M4>Y<3^0~uTOD2kXD@J3^ba`hCh&X&yXCP{n^L`du=xL5`*4W zh(z($!99d8fBt;)tKX;e_?2T}Kc4&jK%M#y0|!B;UmVZufFHRh>2y1XLnivQ*mUG! ziVSGA_?DisHn;W#gCyA}HC0D#HMzO=PFra=stazw1;`gESz5t5`N8?Qdf88nZM%3s z-uGyHcF9jTs#4LOf|qP>U>_1sZq{K>+L;wq9Wy|3>+!hY?YeFKFFaM;CaVFS!Htm?+ybso(j=#2<5u68i`w%lQgDc z05XpFrr4x3NSDBz{ZKE-_B*p-&YR)`hMP8)+1~l?mQ}mlFYd49TjxCUwK9K((pU^R zMf4({B!KPu=U$k4te=$<9d7g`KWI_z>;n%}(SQp3j|W${Mi>1QmxUGO2FlOg@36RP zxMF{}6rq8Ot!S?uK7HR;^zwA|7rEAquek+%tlvH&XKEvja;+V$*uVS~aCwH<4sQ$* z#lK02a`B$NrC=8Mb(#;E7XiA@uJo)!dM69=R7)9e)zKgk*Xc4%dLaoG#;{cNRzn^m z-V+R0SKblf&HU-R6*C+vENgcr@K5d@M>FUx8cFl+rdAYvcTK<5ll#uD!^8Q0?Odv5 zb0OvlRXfP;GcoqPur2iLWJ@ZBie{M3mqaU5dL2ds`@qRU3{81Cp*oY4RLb13{K{&->Li0ScylA&G-e-(q-goHYrBF{ zDQ`ZZ__}8)N>=##C&?EO3I`VlM4#=u%=yY8rQM`BYcS>1<3!8x4xK|o+iog~)lXmf z_p+VZjM8}(+8u=PorQ@6nZxi2Wc7aGOZZ>N*v@ic3o8(#TL5RqWPGqH-myhv@<|Yz zOD-|yfUWE4VHrnrQibP>>^mWM1TunUK=YXIO3k?3nR?34RuduDej}bH9JKCU7S#SQ zrhHjA&^XXPWo;_vL`v1AYm8|+1)?S$yq?D^Byqq?3o;ERC;q_ByDuEH5w79~H4$*ne#n8Ggu zb`w{eA9kp1!y9jh@Fwf?09GH!V#I~_K{_8boOYw%xlW~C61yPW-a*2IhpojBmSsQ# zI`TnwxCTkPrx@1nON#2qdk#{C+Oe544jFa9vfYb+Gc}~l-5Z1t1Xw6@iXW*$ROCHJ zV%K@Y_0i-Zd?V#hkfQw_=>&aGi>b$250t1ZI$Yr||8_YyyW=orLBz4j2H1wi3sDR3 z3pQpDvO2!4A=A6`sOoOSXU|lBtuy*mKBj~K?}73Vk&s@Y)Y<^$jp)594!MOM6}>Il z@Fp%D+WK86p0h&MhlT)5c3O<^;QX}MG$+0!HOB!+h^ z2h*<)@Lc;pHEtHqyy2?5CLP6`3ykDGz2b3LVpmL06fH94tt))vKOy4|a=cZgffrv| zPy$!Gd2d>w*KaYGa0fgKe##@t&TBA zXSGR1A0L`u)-7Pj)wKfSk|5J?@jeE9o~wT!#zywzBn7exx;^BShq+~_QO?r+(l0G@ z>G$7dOg*@?E(6LXa*$w|M{MsO31YN<=2_W)Ko`-hIBvr=bf)wr6;s zp#fnDFjj!%0)u~z*>~JEA10g6YzVDrjMNq{^QWrpj*@6=Zn?780uypFO$T=xzF;z79m2N|js`Om-6bS;*#pA7%*OHCwWO^?P#$&gY3A2-OjylvcQ5sB&g^H<_zGRK=)0 zM{&-vPZnXgN;_t#xhIMVs;#)|M)RP;D^F3QRuU*(*@WN4|A#~o+lEsL5oyht?B@^$ z3Cf={U=?;6C}FI4W^k?HG(3|k{6VPTsZTBQlCLihn94kjDhYYxHqz9 z5~E0wVQl+TgXyJQ7@FVU4@$*H>G=`fZ2VA5IMZW2Ni4*(Y zL65>GcW>e|$&zq(`TGTE=lN3oUr~M!qbTsfIao=csJ@#gN6Gs$wgzQ-+)VL2w@-zI zf-8)FFa1B|^K?xj>uOn$ z!2sF0Odw>a>|;JQe!Dr2;lyU6)6vmKhWiV6Ob9*=U8giNy5}m?mOmK5-VbKH*!wQy zIl~a07~r>I=@O&BZ-$>Q@Y^VJs7%~iicq5#o_yw&=?E_*+LP<9YN*TVN5>~{ zhu2UW;0qB(GHUV>AE-lpJdEd3J||$P1({HA97+`lv>N2|ziL0$=ItiuZTmHQHc5rO zv>=NxRuYpA(;Y+v7S`=b+juTN2i{IK&a!ur4 z%DEiRbx2IY{=CPD%?CoF`|VxuRkI3_b-_FjY`b?k?9l1$)9o`}$scIIk-eGvv;TWi zAg7Ocil34`=g4#^i2&N&TCW)qv%O;-Gk3H7XJj*(m&%QpU%9?hP{F%Aiyt?lE;4zo z=!)Xnpkr2-`<>ETnnqUMO`NtU{aM)9dtr9ZIJbfC(cZork z2en?HXIEi_@KhddePDZWvs?1eMZMHJ0f1&YAfJ`GJfr3@>vkgXagKN={i5su8HGo* zim~ENQ)W2KySlqPK3D3cev*F99{9_5Tgw}65Yh{0%EJ2`S(!KA=A90AkPDv9n9OX&c^`@=R5`Bu z4N>rf3RPks>P{vXr|abV=DGV-9RzhB`uQnV?)u5On<6m)T6 zTjyavCYrIEJ=bt}Nidy zXsdPS-1CB>yx(~w&a~-5=PMVJnW?}JwAKldaC2HX1{rOGBuiWnEr7}HM zK`B2q)-0#wwd=SpYz3~h$U_%zAOGN5ewhIjl8Jw<RS>kJv?|w zbrz%q5g9jrLV=;t2%3U`)Ro(cYInJTARBg6oeiy>>_Ook`!U zB-VW01bCEpw(jivL?x-G7i8%wGbD7tHm$G*Ep|0yelx3}bYqa2=N9PI(?~OE((Fn? z%GR*ViY~Np>_oA1shj0kYRZE&6)PFBljgaswf5$uGfTY%WRd>ZFB`i#dy-x~eH{W~ z;W0bzzq8i=4*n;+o=z0r%^h$V3{hNBG6kmvN!C220p%YQw#?x{xK3>4NW4fuRFrSN zba%RRx##&K8_)x;EJzw+8T!4dg?a>E`Z&mAX3gpf`q~4Nyz4#hNBYsTqlYzn2gNxx za9u++S&#}coMb{YHa0-(#;jPs&X!rsxS>~j|7RpQB50o=JewI?=W%qb)8|~b^5?Pd z+_lwB>@)xwzKF!gN@WzBd;S;4_WwAz-@NW}W;w3a0M8$vt(x?q-}C$JI{R!rm|VuV zQD=ucX;+ZXHR;mm*)!~U{@`rP*8`IAt{E|rjv_#!Y+Ho##w)ZHy+N9DZ^NtXjm%$@ zxahtI_nO)dh90W3paJ$>G$5C+UZ}2P_jy_uQE^6sLhMHo2)fWr!=k)=ZIk1_3z~Vi z_f{Qd8JP2nkfzJJ+zYCH#o`NDo%NC}pg|M>} zmM?TqA9E@){GBbrMmZzj@mQCKuRw~ZsU8z5(P|OMiID*vZO;&|#A73TweJ!V@05q- zF(iOg@tB!WXne>$Wb(~g+|CNc>S|)%=h~F~hem3>dcC*LfCm~1Ddl9lkD5eKQ7e2_?bBr z1Q!kYJ|UUD)uv$|vHK{us_aSc{H2JCrDX1?YJefr4p&IlrDXfS*@&B67b>DX-%qFA zE$|k0>HN}ubg1YTg=OUyx)lRj%;eMJ7qE6b`zgdP69v_=$R||ff8ba72xgu1?eNuUeSqMk z3rZdD5-k^GJ6$X9V*E_IVt^U+S!_9&MR^`pQNRC@ctOjtWcZgQ4R~>v27E`fpqyzy zOn9@+AQEL;b2xjlTCw)Ed|gNU_tld2kjM2_yM6TuFu;v3FzTgB&d0FT!WI}2p9P6S z+g$#S6$VHt))6ZfTyF9iA3?53A9@ul-;pdx`U1|$KusAmq+`Bif`~~Q%{nIscWObT z6(h^@FB=oRwS;3I6~^sJ{tfD zn3Xi}x6qgSrVFqqAvVz8annN~ApCW+V4>3$g<;x*3!3~;xkuZe%%XD)^#ryy8>?n) z6b*2{lzXE}zv|;Bkw@_f{0ZT4$(9WQi$L`!KQSkc#bCo+ALY%- zwcy|xS+vNw?Q-hJ@x^DY1{oLbC)}G2{N+`fC0PkBL2f+Jx>k%dw28XWS2{7atTYsi z6CI9v;0oHFiJ5BP2)bBKjGex;F~ikXc;V@W{Bs&m9OMgKea$Uf|2r@IFV%<|kd%Dt zSv04u*)*ENl(YQo+UM#EnIDUwKB!8=U$Sp0c{(TT$uRuTnI*n*QR8d!B38~Q-}~U} zX8zkyv^(+g%p=VGUm1_YtmhxDulp;NsY_+hlOYFrsV7O+qrZ|nPc*a;C5r6GC-H}p z$p*uzU%M=7EC%08U3U&u6!g zRcmVpM`=1xS$!Hu)XxV?A4v?&7G0nxWXdA|#ZYAtC zJ9SQDc3zdvD|2Pr+UR?@W}(td|9p3TK8^UgRNOQ5gquzRP7ZWmekFu%i3Qqf!kefv zHLY^z-S)1lvYK6baS$N1j&f6Y!Zs_fUO@vO=L=f-I=5PLp@=v-4utgk4Xs`*=oD^~ zl#2PfeEH*tCMI7d^WR&$zga&9L*5Z&ZHG-}OpxaEPlX#TZ-ms3C3v)cde`Q+zIRnI z{a4|iuU`X(k`NR;ukSxKzIS|3)lzB?K6{1qKzC1hGr}F|Xj6+{$2t}-^>DBESfr{* zN=goe_%Iy!272?p$-}8~atl1GEnDPaPlmtA6s+@BMb~)+zPs;r=lz}Xce5UDq66+0Wz&FW z4uY02hO;Z8qTw!OF4hO^zh{8du5T*UoatzhH=m}yZEz#qjeqEGz08G9vRLI*<5;uf z2!u4FW1hJkAdto#4@AwIRVDA@_A>@4dAnk73PGtv?b%vP6jiBWSc2Kukkb7_^MlmW z#LQM-=w%Am0A{V?mdXgVT~EH`oAJ5pkQqxs@FoT=LCGk+PZf7VjaIo8B2Vm5PWtjl zRO;ipJT0}s7<&z?ku;6S*lAl1jgjS&Q_-0(u!5X8M5IZRfOoaQR>%SX#D)sryh39axjm- z@;+$>eZ<{f26wt5*nMu@v((nRW>K5h&{;HeNf(-3HIgAhESVBVf84t?B*~eev+Xg8 zUjLkl$7IOq@Vlaz=Nbrb^!n|g)R8;s%5jb`w`8Jq6IEQjLl39Lx-}V^$+u1wL%^Nu z-K6nr;|yM4b2e1(jXlv0uk}O0VYBpD$`!>!J|aJMGd~8|x@%Ro>3B!YVQn-9po0w3 z@f9eszuJQGsxJ0ZA(tdqW3;u+yt^HiY@F9I!MqtS5z50u?|F|!8!Jl9;#WrMll3VX zJEJ?Y-?g0m5m}3trWex&z83Uc4QN-I#Hf*1E|?QbrZb~P&Mwjb7N0NFK7;QStFBii(+uM>H!!MO-&;x?ek$o%nTT$!l*nJVhrfY|UPi;JJG*&5FQ&fO-7(gR#4nzAvD`?~EPs7!BuB zt!Km&ShNcn{?WDmyYEkW-9op(qiptCMd7Of$15eyYmsV@F$~KcHM=6X(Md=MBNEo^ z#*R}#6fa-SJGU1ez#S|JQ<#nG1Gl7Rh>a)+DOU_&=FU3a@A4O?s$no#=gf$5qLp!G ztByqZ8HDQX4)*K8ixRzF-(SR0WG83hC88ap`P7CSEDQj#Q1e32FZdX)U8pj@v}3ya zEbeNo$)L4!hI91r@mGROTurPj9Sw+Ryi144o#sYY>e)|GZ9;6%#Du5B^aYm%7Q8@N z%6m@uHm{@lT5fV4O@>z+smyg%GyIJhFtR~9NmF3^&4v5i^KBPzdrv5CW|k`HiXDQr zC@_%?DiMu)@ zGs%14y>^Sg6%|R9COQ;1@8y_D`gv5y8r*(@HdroM^;)B258nbhqRAdPJ=8M^y*K)O z_Vhni*FDi{cEGuHsEOX(`qBpY(*Q;-L0BkN)OvK;{IaJM)U7(f@M~jtr@kn&=0WuQEtlCOrr!aYY2Vn`O(M4kQ#hL`icrWz%~bC^Iw*XXtK zvd@(nJu{b1XQv*X)wEZ?T6}U_d{g!(4Y=DI7uC#PM)Ys>R_r?sJ@V}bC9#tR^c`MV z!o5W-L1Qvm$eIM^{`6hQNB0;=O7MN)L9l?2L#BN&N013YdK&vw2kMUYd_PuhlX^^e zbm+xh(GP(lsKfK2I^)FNDK=EJJsU#p^c8mM3_O3^ZeId9%2W7wcvv#u@67m|~c-4?%;h5=G_qnE6&kHon-n-(c2&iqcjZ zALm^i?m4H80SKKXAaKwJwwR{Z8ti%dJ+@0Ydo*p;3>XXN z(0g>4`XGJuAKILHai2Ui;R6eU6|t8}R|~FVcyh%_B&gSy_gx5ig+?7VSD)gO=B9($ zavyBl2fmChgsR__CX^=7{gmW&d|E3sw&C26FKSiu%dd

z~bzsX6xWG6Xrv%qAdy zGzf-tYp6s?`A?iq@r@l;xAi&h(f8{}@J*7K?4lj345Oy2L}i#nWsI7GUIn)@>pN{g z^wgi^Y5%RLKc~7fa!$ogU!>^unlC#{@_N56OAOcfLI&MN(1-kgVEMN_mtW#mIo6)? zr~uwB^{F;GD+NN3WaomX>nQe1<0oU3wZ&FtGQRpnSH4bwK;O!4uQ!NNFx!|9WOLi< z>65%`&mZ!GBA@Yb5U1n;q{qKqce&mNejoB};;7h3Vs1f2tLd(d8_B8F=g^}#=$%na zLt`W64a`x2BNhr?w%P7WsUAA5Rrs22Uu2kJgqg{dVE#YPxc_Z>{-jnER7~=01|d!F zv45yB>vEu0>{tXpIy%l&%AuO4^MeERPW<3u%l?K^gr2(wK{+)lffw77Vc+F;V zLQO7@(;?}S+m;KDg+1f8nYV}Jd#M*~0E()8X1qKo|F5>|AAr1n5g+>J_gl4RR>tGg zIyCfOsGk|#e-d#24s6$kbh-gTd9SQi0gdA?It*T=o6D+l_GB86eH9$v|F^=~ze<)x z$?0F;-7V8Dygw?1-RlG&SlG}j289Rm9b?TGT zz!TYc@8+#<<9Q@a3E29VuP|NNe%V%(lZh4S!nB61$b9prG3pzb4vQ6!7yizR{4F{E z-+2v`L@dd5Z;-%qVsaM^e%Mdy|GMjUD%&>lSD@8b!(BL`icEH;0eciIF`eX!`wA6p zIEUG z4r!^oxpytGeIjZiR4tQu7a~jpdOakmG@y!jjsCPI`qS3(P`^Elbr88BZIfX1}w3i)N4N~`K;@kTEXh80n+{@r!E>Z!k zz!rpf7y8@$x1|3*f7>j2e<|;;+^~M50g-58JPpv3g^@vMvdkYpgN&(yu^rH@!OJuN zyGG?fwI~u7NC#FF8sLe?Nwx{5(_=D zZg&7ZHyL{m6|-SmePX&j>O2e!Q2e(H^_>A4u(3}Uml^S{ znP|WgYL85>`~=t6*vK#HU9Vw!2&oTJe@E?y9a*c;tUfkWqE$WbWB0wIPZ3lB&?!lqx6{V6|H>5`}C;#DODk;`N1Yk5Wv zi5GISzkW=7rnilW(K08|Ssko1F18+9R*5}S|EsT^BZr&UE>sDvr+b7xA#sEB*^@4A z*t8Ly)c#rQy4&Pm7&QOGTAkXBAYCAzuN!$UUohmse*K4`aF}bj_y=$WphOkS?a18f zHKkKV11RpW>GYsSG(c;6gG2*pzz8NE<_h6org9MP`o3XyoyL+bDsCWK;!9rRk(d{- z>0GKLs_$|y4FKq904qQT;@F30d-vxG=xRg*s1?#=B`Y*)At93nplHCsu*)S%L6D~_ zYH-jLE4YZ?M;&m=F2WyU1wUb<8I7f@RD^zT9d@d6eE!TwUT~d3GQ1lInx;>Ro1NUB zcA!r}Py8bhgbgyDUe(6#?465C%+*Y>xRzuFKy3EIXFAqS`%p|5jPY_uOeIdJ4xO+o za=>-jPl?23)E9#2%?H!3v;t{>&Ms_^O4qbWD5|#tO_$+&dIj3m?CFx%f~c?XuuzYD z!MHFz^kb*??NUz;P4#P8d2%G=svq|B<_jvaC6#1;?%2$N(DgLZgRn;?S)-=(>8$#r zu?r(~xRUWu@Nh>KhLN~K_!-0-d^&8p@J{teis73FMAx-VHNZdQwb&s5i6$$d&@^CS zfG$7ALr{D-6-L(xO&FPlHv{Dgjb?@`QMow{1^6DUkt=8FU8bRHr*KufpRLf2k+5@5 zapuu}@f`&(azi!P6W%O>`e1j_Oo$04{6uj9GKMAR(S}Yxe<~^L5M$W+bM(`xhNc8-la4M2+_6K3UqL4NKH`;5FsZAPZ8;tM zA_3MMs*{dyh;W>)XY9B%FvDeIbMcs7f~iK?o^-b3uyHM{O zKhdf;lRZR^7&SedzgGFA(u{X7TEwp1mYrFxiFXal+@OWTw8M`0tnpjKUg1j?$rC=2oc&;Qs%i(x9YZ}oKP>8uNKIYxw9ISsG2kcVvosWWPwjd$5Hi!ehT7pPkF z9p;7IJ_=8}`sG+n{P?r?hshj3urvQ^dG>_svtBpMa@o%=*3bLJf^mw1i_Bg`+_wy6 zeD}f=EsH`|n^;LZ>#n&pv(HnT?{%`m;WoC^K{58SK92zzU%~a6Fsn{3kFG;Y)dV8$ zE9{8YHCSAbbI}S;QO?Z&G(m{2t_%@^>$)I1tY15&gVCwMhqqK!c{F(6>sO@H^&PyJ zgN6BS>~kzbcL>tdNW?a1>NMIrn+(OTr7TBeuC6Ho-mM8eSmFvRnTo^yQY}Q`S~Cv> zvmhTlV0S&4CtXuN%J&qpZ#E}5Tk|}-9Nrh_k4e@-WM#4=YpwdPG*zG2=YQdI`+%;tY+x4tX4 zQxZuO^1bsQz$Xjxse$Dsq#1U2KbM2@<_L6sZFU@brQkg1d#sF()UE0iK?rG22dWW1u`a4cm6eg5=d5C!KW_>Ww^CVmfQ|Eo2l3VAJ>pEiN@hQMu z&yBT3Fo{{d!hqRyLl15k(t|p(gMOMJI_z07^vSxUwDsh!&ncBv@ayCiUBS$X0TwFz zm(XAGYt>ZW&5kAoIvzkrIK5m0;)lCSYMZ3q8VA>IRyY3QnrJAZV6eXu=w=Y!hf;!{ zCNmKdUQKyEeSpyDd$o#SN>q&YKO-L}5<)Mo(*SPlT~{A7_6hd};gQp&&Y$AG?(VtQ z_==uS0fATSkK>bVlUpXa$go0#Z;ZFzoiQJV&xuogx25U5KE~&Vf=;5|BJD>uZEL^8 zoqv?pbu(=FK>#6re|-9GEbM8B1QBIYA#Nl;redahWCNB%*QBGn1%xM5J|g0HMXZtN zM2Sqf(N%P!Vhs&YK7q_?S#2Z+n`#9fp2NtZ=1fIkN zsXB>JUfa}>0`DtS!BPxK+&1?K(ofgF^E|0YP`;zi)L;r@&=rkXSS^`u?;n%Zb~HD+ zD9clw>|k*3fuJs_W_!NDjKGIRO~bh+maJ&NXKdMvcB-ulyE+pWQHY|AiKGDtl4};R z>a)Nw` z!8N(8B%;06)nhF7>XjC5c(N>hVO$G>aU0<7Z}HKAn<<*2Qi4_p=*FrHMne8Py@xIJ z?3aO?UBgaMTDK1pp7>=!a<$Y+=ZKd{O(SMrs6r!@uP4v^`bmD^<6}Se+ZZjE*H+2B z^tdxa;VA*>Yxwf*r3U0MFUn7%hcg&jIY9}qQpb~K&EmAUJVoC`tojG|xLe3=@YJ~_ zk3JR%R*E?=p7vkk&qlu8#9hI8^duJbbcx)v^*LL!3c-6f_Lk5KMiD;7C{ComS^w&< zbmKs^CzrO=U2bb8AuRvUO7K4rzXQs6!!bd-*CH69gzuKxb$mWRyg0yQ74 zGq5mNN^meqA_v>_vy{QS(2fz}6@ht4uXD-}C1>O*@44;`mfHOobMPxPP#@Ly+s=aY ziJqcP-WZhkT+Q2(zkkO%2el!|9=OH;y8yTwU^=r@@M7L_pmjdN`sG1vkfj8v2W;#N|ECW4EHm zTpSiN&;v$#WcWP`f~kNIH!~^ibb!<(#P-SA%Z1oS3E%~I7L-{lFpzMxF>S0e7s2tV ztXq!Zm^u?v56XtfH%Nuurb|2aFNw0z>?D9_U>0)2=r4eJBG+xN=7L#a@%-941Rgji^dJ3JK>b`OG(TZc(znvZ?*@ zTLGv?K6;3ixHWASE^Xg+r0M6;e#&qK@|kq=0PH;!~a0TPU)2kglXBY?84U!4WZpG*x0*y zoXO)c80&d^nbb4$xg-8qq+0JOzJ6d=hU;7d9LcAHRe{GaA^eT7~ z%0M>vo`pml=oEzX?1gdE4XAe}&T1NGdXF@)5&C-LeQ5xR#SXRDj`@srfpgv>I!@~( zx)eT6I~(=c^-Gi4nRV9SModJIkJsNFP$6hp0UXlZz&%Vpndh$Rf6!Q6Tan<;^)*b- znJH9-g!>SrK=jQcs}Cy3`B-n9h*|bj@9v6}_y86FCCJWALa2j6)cEXCx3a~9plCNn z-O`(nn{8P*?zsHo^76gsD8{_1l2BUiaIWb@-6!~ovmyHiU5<hNFZN+4OQ}X@i^sM(XJgHo>O~AGo$SXJ1>oL#+dlunl{DwwV-h4B_>P#YOQ;)*U+bR3Mtj`1&QG`0asPUlBPn2S_gJXTYXWAq zD(_bNAky5T`ok-^36s&I2EjaBk8^*_H{2vxMO8o#BNH|ZMkKl5V`|onDu&`m^tQzx za|9pCqYjTf(YSZbJwveSbDc#?H}CfdyMxs+uYKGTBn@cu&rl^qQ0oizMa+MGq^_TS z`Y!th#2z@H`}y$Q2L#dHXdNCmrO9twKgZK5ldRNT#zO39K;r`#>-NDG<~ymSoQRk< zjdlq<60>;`5q-n&bZcqw?ixn_&pR>xUC{DR?gP^C=xBNoY+Fo&5Ij;V{q%Ub+ptw9 zUs&_(8VTGx9CEc`~S_ zTkTC65Dx@z;L(kp_>E@xsMlou0VR83%SJ(A!!eFASXN;c)?5sUuCzR?J$}>P`iu2x zOX!*BlJi%%)uh3AOcZPyM)0R_2yIZoUDR`^X4K5afspbf8IneJ1+Bm$C(B91qivM| zb5St`&s!3upiV615=^|(UbC+$x+R%$lZUd2X{F!YuOqH6(FtC$AdreD9RR zZDZo-De-?X|00&?wBmUne1g6<4D@CF4TpL|54SHkO%eeZ@!kF)m5z4vqx$+w>02oX zJ8MXmrk0!xG{5c}zk1~ecRyXcBT;dS5y`l)M8;~U|o zk^Q|dqPbg*6(#`3#0|Ix0{*c(f?5{%$YaK+B)j^}+@(X$j-B~t+UM^h*cL=jvVS*A z?jIlD2e0*fIf01#Kc8Y2U2JPQV$>e`QMQV0|AV-4gw=-zVmfly zpdquC>2csM+!rW5lUPfQjHefcL31=f==VCnaA2Ldv2WEKFu7Xe`3|AFx6pRf;C`vp z>w;0e@tWv%|3DlazWcAI*oKqO`c_dml2KE1oM)zxp1_(`(%0>yCmDc}ErRH(@=v6N z47yAV%236#>j(zxukoowH1tVKn58Q2J=DPQ<1?q^V30aEU#(cZ{Famgf0D<=+v^*z z)Au2N5c_{n7?>{o#H&VcN5+x5z72TiQC?)h=H3fCF#(93Q;71cy#OU$xFtjU!|?V7 z{|`f7moq6WWgwm04Szvsd=R~Q{ZGiwe>sbtvxgDPr(jW9z9D1J&vxdyf8?6)WwITy z^LP3pxVQVyHpPSk<+*}s;fiXs_$?SzF82PFC!|uZ16+B~38MP+MwEVOiR$F?daclb zPZKDE>(Th@t%PdK)88-RA2#xKx#Z*~Mu~{Qd$(Y@1b$8&maB*`i4JD`mDsL|F>DkN zTuLXR{+aBw2Nrg(4z-aH9y7v*<@cY|H1cQ+V}qji^P3h literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-7_hu_a2c70a4e452a49a4.jpg b/resources/_gen/images/images/blog/blog-7_hu_a2c70a4e452a49a4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83a8845835718cd7f42e29b67c92498bef1cfee4 GIT binary patch literal 750 zcmex=Nsy6Qkn#T!#zhPajI4}czyJk|Ow25-Z0sDIT-*W-OpMITOf1Z-tSl@*m9;=Q z1{Oh9Aw@$+HsQcTcBMiQqsEB~Ih36?9uy6__(8=usi=vQOH5osQc6`#T|-mL#MI2( z!qUpw#nsK-!_zA`Bs45MA~GsDB{eNQBQvYGq_nKOqOz*FrM0cSqqA$$ z3M&~ka)>xhT)6Qdr?PR-2hpUWi(FzVCJ$9Vg1iLw5pf=BBFjf`55fKO{}uxeGb1p< zm<1W^8E&o+`@}Zq@H5`Od;d+%8 z*Qp>=-OKB&LJ!vGZPwvddt{+IkNwJZOW7k6eNx>H&-wgy^{mj2-RWgX3k`etzA#=4 z^zAV^w(xc_r+ Xg^HYC=G|4<^^X>Cu2|H?@c$+N<>66A literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-7_hu_cc5c86d0bdb969fb.webp b/resources/_gen/images/images/blog/blog-7_hu_cc5c86d0bdb969fb.webp new file mode 100644 index 0000000000000000000000000000000000000000..a442d46b58d736396a0d2f24ef87c7ce35d00eff GIT binary patch literal 5978 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 Ib^rhX0Mi${asU7T literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-7_hu_e1c9231db481941.webp b/resources/_gen/images/images/blog/blog-7_hu_e1c9231db481941.webp new file mode 100644 index 0000000000000000000000000000000000000000..0e255d2a9dbe008a540973076c640f3e7655be4c GIT binary patch literal 7162 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 z zz6FmPdNIKt9fHD381j9m!=TaB1FX@ofzFx5xai717$r#pw0{O2LPdy}lbtqh3>ck+ zuX)`u^EgEJdqzVGMbpBn(*5N?!HK0{>l=i~#0D8+BES6f=!n=LUtlzfeDP<3&CNn0 zL3=UesvLh8c+3!0F=6~qy(DmJ^nhV_aanRxzfYg*1>EabW@9KcpM#Pz z^lzD_VnkGLK(!oWGPkz8)Gr$uGE-;0%@#D)CMw_FW)Ry$Wa&l--(^z3pkf~Ip_$;ye#(-<8;-HP4tK|mN>71f=-tVhT;n?C zxI&)(aa4>x-Ltz#cRPE*=2iX}U-`*uSFm$2HpI^FBp{4`1HnQ;r4%>)M3?B$KD;kX zNgt#C_Bd@ubBJKGwLR8wIogyiPPlW;7zrIg`|NsqlDje+Fto>QT>}$sLR=iI=PfjD z;b`FqE@~hEZY@xcAN+ot&4(yQ3uuwD5ruzj#u?o1$TYWAH@dFS8OHjV)C6ClKsF2d zj!qZjcvj$P$1`bo5PA@ykW1dp2_nIimD~Lh)I!*oak_ZH|P^uO72cq+JXsF#v6s47hVS<0Co5^bQPt5wLy> z>QtRYd)Pw|k=#cIUy`S*Liyya8go{Jyr&#aWs;x! z{z+VAaqZYIWP1*S5f(MNng+j!Mn2syzO+M-n-@fH8fWj6>b|qjXJuowfalOHlw)HFN(q!I^2yMS8<_k*dIj%pdOdgkZ`GY-~ z#m(hS$lnxLnUP-sN}jPbhF~JVm_C)cy^X_>&Gc-i6}pX>Z6o&vi0kpqjL;Agvr-ep zJRP^38XEV*2mV+)Mzj{W(ugE@aN3HY);q3*W!mXhG3Z-oG$l{R${30xYq~Qp3y?~}U6rvxU?}K;Nt(b4}Ot;0a1MSGF z5|vll0+~BaRuO^)3bH=^Vy18loy=+16+N&u78Avj|6l~E8Y5G-BW3KdRD9~kR^3n7 z^S>#hzD2Ucn#(fuNvBnH;BfX8WNs!Z_5l)=dIbuji z%qljIEW=|0tOz(Ct>n{p9sb=p(x2N_(J6iTGjJE51|O8l zT-MYaBG9%$yI&NG`qpdIetH{zZ1smZI=-33oeiN^ce?o|-nFMEs zCk#`>)0qDk8avdDPT@pqqGCLfyQT@51Cnd+IyI9i zAac`7J-gD@DbqyBe&kuCPd^z$2d4FuiXh$A{quNRz;ZUCiCAR$4q8Yp!9^^AznK1l zIj?Q(VOWoY^@pw>W1ZG&%qpLd>`pld+P(GliLn!!@*s*_U32?VNzT@4SNQWjJzr3sO>fv9Ld!dxHkY+1@QCMDh($ literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-7_hu_fe6a5eccb44e6265.webp b/resources/_gen/images/images/blog/blog-7_hu_fe6a5eccb44e6265.webp new file mode 100644 index 0000000000000000000000000000000000000000..98276948510ba7b5ebcb63ada381ce50352a396a GIT binary patch literal 10414 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_40fa8739755bb615.webp b/resources/_gen/images/images/blog/blog-8_hu_40fa8739755bb615.webp new file mode 100644 index 0000000000000000000000000000000000000000..2c96862305f57c5c063e189c3b3d84674cb77ba2 GIT binary patch literal 31308 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_745808788662d8ae.jpg b/resources/_gen/images/images/blog/blog-8_hu_745808788662d8ae.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f17514e1de6cf9e734a478317a00b6d12ab05e67 GIT binary patch literal 727 zcmex=Nsy6Qkn#T!#zhPajI4}czyJk|Ow25-Z0sDIT-*W-OpMITOf1Z-tSl@*m9;=Q z1{Oh9Aw@$+HsQcTcBMiQqsEB~Ih36?9uy6__(8=usi=vQOH5osQc6`#T|-mL#MI2( z!qUpw#nsK-!_zA`Bs45MA~GsDB{eNQBQvYGq_nKOqOz*FrM0cSqqA$$ z3M&~ka)>xhT)6Qdr?PR-2hpUWi(FzVCJ$9Vg1iLw5pf=BBFjf`55fKO{}uxeGb1p< zm<1W^8E&r7(@WkSbKzNI9pPC{91#&t4IK2sCt`ao2pD%;;prp*_Seec3tC;K65U5qx#ZF yS;nQecAjHZT)?TZsEa|fhwDj$|Ayrk9eCK4EtGFuYVcgV*Q$X_V^M?s|C<2%nM5T3 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_824a82d1a09783e3.jpg b/resources/_gen/images/images/blog/blog-8_hu_824a82d1a09783e3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52b1470ac4915c0b13dbad280548502deb3eea7d GIT binary patch literal 751 zcmex=nAuRebI z{N?Mn?>~P2Vq{>3cn3&AJcQ&QL7;z_SXh`@*g^hbWGV+@WL#&zpshp{P_mh8G{=bf~t{OEausoS14So7K+;nr!$TX)=Nx6lI1^&A&e z=D%gOd>yy{;kINUpgfDE$eSwx@>4>lFggcxR|&@GZC})RXYSS)ll5HF&gZSE6k&Y6 ztFA$5itN@~FU|f1HFj;-wu;|tD^GO>(;Hh>@4zD#D>WF`8EI|lJ{z62UX{T?Y-w-i TRGkt=Bc9-o9$Q{9{J#kR+!_Re literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_877dea591168f6c9.webp b/resources/_gen/images/images/blog/blog-8_hu_877dea591168f6c9.webp new file mode 100644 index 0000000000000000000000000000000000000000..b0ba81be858ea28f68ef872ff18e801a040750ff GIT binary patch literal 16712 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 aqL2P?u9ig)%M#GXxx<_L*MC_6!2bc0Y_B2! literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_8aae514cbdf57851.webp b/resources/_gen/images/images/blog/blog-8_hu_8aae514cbdf57851.webp new file mode 100644 index 0000000000000000000000000000000000000000..a4056c13169c837e55e74dbc6e4b5f1032098c1f GIT binary patch literal 29892 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 N?$V=HT@3$k0szI+zk literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_a605adb3511bef5f.webp b/resources/_gen/images/images/blog/blog-8_hu_a605adb3511bef5f.webp new file mode 100644 index 0000000000000000000000000000000000000000..8167047e0c1f9189ccb46acfbb4a4aaf98014157 GIT binary patch literal 14836 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_a8ed6ca87b320542.webp b/resources/_gen/images/images/blog/blog-8_hu_a8ed6ca87b320542.webp new file mode 100644 index 0000000000000000000000000000000000000000..c7c3b86602a0bcfd3a9807ac9ea15d8a7c94d36f GIT binary patch literal 578 zcmV-I0=@lGNk&FG0ssJ4MM6+kP&il$0000G0000d001Wd06|PpNUQ+>00o%}MD#zv zux;BgcK^S*0ctth2@w+jL6Y3KO^5}+1w=28d_tv%jcqne9?$ROV;Ge{lYqz%MC=y^ zdgC#IQT74$hPSf#A1N8bjLdFZWQQHYj%7YZ*@}_==B1c61`~kUK?=1C1XPV^i8DzS z3q+6=l{^_J#DgY_yAnc)u}H_nY{(^7nSiPli|c~GQWAbru=2;lArc#O06u%D@Or}^ zO|$Z87UF_GmrrZ_GVUOmj=Q>>0-YOC|~|^03;%*^owwz3IiBY z#Qrjyh9i<*JfZS%NlJrV$i_8@<ID; zCA%6mdoV!E79f+$mSx9sZIxR^yM%`^27f8WtYPUPcMyRexJm~J;o_y9dG)QgU`B#qh8pkvYaHywyw_c^?R;|!ZL(k(`*5XJx;9bE z8Zs&u0aj2rAZP#p08j-0odGH+04M-Hfi#apqM?h90?ZYJ0(w9I3PfWISER%MYbd}0 zQLqpbvM^OfgfdUi0RF=v@K?-G@>Ew1NbA7{p0Y0Z>9h^i_<@A^DYem;q`jj}*r2bZ Qf$GEoLliWwgUdhw00%Vr&Hw-a literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_aad970f07ba40e8a.jpg b/resources/_gen/images/images/blog/blog-8_hu_aad970f07ba40e8a.jpg new file mode 100644 index 0000000000000000000000000000000000000000..582eec5cc11d2dae62f8151f0153bc6f4159bd47 GIT binary patch literal 44448 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 Jjpx_<{{y1`S;znY literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_bc03a607701d5da7.webp b/resources/_gen/images/images/blog/blog-8_hu_bc03a607701d5da7.webp new file mode 100644 index 0000000000000000000000000000000000000000..0ab9dbcd157fa739ca03af1bd19cb26f0886c20c GIT binary patch literal 12256 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_c5615396480723ed.jpg b/resources/_gen/images/images/blog/blog-8_hu_c5615396480723ed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4611eb80e87797de8b36c323135ac7b89d7edc5 GIT binary patch literal 15232 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_de52e2b1d1fcdc3e.webp b/resources/_gen/images/images/blog/blog-8_hu_de52e2b1d1fcdc3e.webp new file mode 100644 index 0000000000000000000000000000000000000000..d03a334e4c0a6c73948d62ad7f3329cbee7e7c0b GIT binary patch literal 15960 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 PGlTvE|67v!e?I;nU`6@a literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_f7b5a18e65e50561.jpg b/resources/_gen/images/images/blog/blog-8_hu_f7b5a18e65e50561.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4bb3b4caaf62155d995918c60f21da78054ecfee GIT binary patch literal 35916 zcmeFa2UL??yC(dEE>c88FF`;_KoAh5LjdW$cMwn@L3&X^2q;A(y=s&mItWPbf)r6| zXo@re>AiO*yx(_bojK?G&ir%!nOW<+^JcA`JPBEZoqg^5zOK7$&cC1k1cCt)B4QF^ zA`%i}5>iqUGV&|rICFj1WEn zKB&MAC=3cBB_$;%BfmyYehtb*#{~UfzMX#pXvm0+h>Qq98~_0gh>!+!-U`Y901z?g zj~np!8;F1q|F@EoT_V4H1t0(s5)u#*5)%^<;os?x{~16;LwxnRpd86HT^mvkcd$@U zOgb5-d}%YSUjGKy9b1p*m&obp85o&v+~kJBc!Wjnii(L#DBM$2QdUt_(>E|QGBz-eNK`v02$Uxq0~?%gQS%tEy{i zTRyk8wRe2!{E8bG92y?^{$upl^vvwS@NH69CB6y4+gfv9N*9A$g%IT8YxL@NC3L*o`$E24wU*f!@w?S*`(N9jt zCH(8g=Eao$n9={Y2|fQ$&FH^R=)ceBd=#J{1mPEqkOq(ijq!2fd?h&0W7`D}%>LO)5D zl|$pW0&vv3lYcr#xa7pRmK|3RElo;GL-al_PHm?2!$|b)%@;d!na=Xp`z_9B-_Rw2 zEqrb#-}4DS^GY3+-T8J7u;q(ofq6y z169Y7+FmNCTAAEtmzGhYr^+eIS#pBx@(nK7|Kxti#7`&UnBOIWO{})38ZmFe{n_`i zs{2_4N#OE8ILuuOe*ui?1!-l112uHfKG1AJch$;NB`ATEo-MZRCJe*|Bg-ShwgF0t zGK{mqC*kf3zB-D+==+GDli2sFTcX9tYVk#jO=ZnK2eTZLWL zHdPHdMX(O&&puSTXw?M)Ds0~hjk@3`R!!T9@ruvRR-CM)MS#rKX0{~f*N&5=TrfzB z0Gkfa0l~A<0CF8DcnMH5GlK%)a$PtvNg^6h6I53OZo*)L@xZ8t{!1)JAcNu!RZWg) znix$EtZ=YC=;i9QPndowrwg%>{cZl% z<-ud}#3ebFhi^7WG;b8zi;0T0etg!wx&US1d}AR5dGolaPBN?7TA5YRRsf4u3WYDY zDGImtB%(uyy{lge?XF2vY8t5gIgJtLm3&n(LJUys?>?*8eE2iyOys4iICoy2OZJ_v z9$znr+UsiUS9$c4Y_uDeFocgi3k+l=8;BIyY4;Vf?HkvjhkuarU2pdfTytuXa@{=b zjQ!c-Q%9dOx<+DhoWFO1u<(%yY^bj+3GDWFr>s{f`1(tE*@C}n^F<4jzR>0Q`e+no z?SlaCt$?~|OJl2QM1}eB>m+Wm$6^pUQ}e|iCAG@9k;(F#DZ#J#n5MPm*NE?rpY>rf zHxbxT#dE;&5^^JAFfHyU*dwIZEo|@kh+&go_F_+Cpit_(xy0jD3JSCc<)wT6ql`6> zpyK3a>25I=T^oy|b3o~!;}`2a?&K$XTAw8ytVqRX(Q7;7YTxvO)pIPHy&31d_?Zul zn?a?54 zIN_ZxVs0}+Irh8ixsmqL96pFT{k;Ue%=`wMqh}j<6>UaIa5Xj&O(Hy?t>!Oypbux< zC+ux_K6#)zaSp5%p99vkzS?gi^af=8y#3sNs05*?w3ieuq>(y5n8_nTw2*gcrX!Q4UNVhJS78SD^?sPYJRRFR z@-B>uK+#^`@Go05lf+_H3bsXcA5nXrjieRF7O&4Y)+SCbIV3(cDf=>it9Aco;xVn0 zix(UJWyEb{ebU74v7sA)LdwJZ^kZNB&tCaztyLbM9{KYa&ZR}=c55Xg zUMA3kH}2pP1u+Tw!XO%bB`TiwUSvcPX=FTzm2ob#S4tnn1jLIV7cdoTG5)k`Z@u{{ zx*pKR-fcedS1v8o@n32y)jL3v_-k&|O|KTeG~>I|N+PLga8mkJ4DERie5|Tcu&O{G z$kWO_zoaKl#A4j|jO76PFqV?Abp(VJQ&%66_3LLjI%10XzU!Ati=dm}Ebp7IhUJc5 zElF1hyML+O-;L6R#R%XcJ3C41nlzGZ$}PBOi}k(~ ztX-Swctk}kfCg-`X|#n0;4k0kDYc6e-X`*Zt?H(fe_EJ|R=--k2HQ=-YK983g~jX^ zsb$Fj$yhnLSz#UD9@Pi;10!kk!P!X<<%iSxdN6XC#Vl~@=K~xXE@pgr6V=goK>s;Z z1zlO}MLyd8^yl(*wiml1KairsqgKh@C=`3-@aUae;eG(`FIP01VC^RA)mjB_th}Ui zD1U#u%+fg!)o}azhdHXeJPRa!ndNxbw)P$R$DXmR`y$$?2Dr8GyHbOM;2#c;i&UBS z^KDKy)te^XFzI%#8)ZbZRfOMcgCK0aOb1Gsn0R%Y8tV=YuZIROA&-XRh?lLE9p))J zueF=3u4qX+X`WFyb;)`c{E!{8(BXaWsnM8`@zi*@R0EZY4yNd1o2SIdZ@g(q;Hz67K;4nns%Ujn>Gh?a)fpW(_S_oXP=aw+|YfEW;bS! z@q5zeKz&0;maoXutToJt(ZX==Z!36<(^KUQ6^Q`S^j(rV6eaRo;i9hPqpdlj4k_hA zkJ}VYsSAj5wZ|fYn!-o&FbbPOOa1-Pi5SeZT78s?}03{%pFT|sNu?I}vcW{&}Q8}e6QK3JlGk)->6s{44 z>+I?u>B~R-3e9-){Liu_0t7qfoZ(>hg`lsHwrgVmoHK3f>U4 z%UDO8ihO%u*|qOfn(R`%d#Rg&r5{T-hU$KO&>rRA@MS;F56DSvX*3zkbad$Pi1?an zw%o|=gnN?OZkCci8=t7h$rcj{4v?>LLbkeWs>pLf0ERJ1(^MKqkjxevrDhP8oAjxZcWRQR(H3 z&d(PzNdX9l8?z4_evM21N)0wUZZobNHm<^|%Dx#(gZSKFH3^@csoBd8?v)$Z`K@SZ zNSJ3^RVdfA4K1s4hw{^?+$M!273YoTp3N=r@)=6;ZC3 zl7}`+WK(@~Qs+RM)1D^1PO9uJqb=3&BUo{CRb1!N)8dinIkq`Pw$mYuAEc;`&UW&3A7pH{H*NkZ=eKR`xR;L zg@EzO?aweAmMMcH{I#6qKYE9r9#Jc%Ire6tb%&!nMDdI?{GhXl_42O|6+P(O*JplO-_kZ2 zkF9Z;HojhDl14~Y{lpSnZgM#9Qljf7ZD_|~q`;kJ6YnN($9-dHn2gz$yD2954aPpAC`C$mkvWYkS+{j+s{%C<+vl6L8=H* z3msp(;Z&q;;O(rmS^r})%^J_oG6C}6Ckn-nG#q}Pfp_x?V4lwb3yN*sjKJlswcO^iKI;ewAq}J-q+L?b9qIU=XxFc*pq>+nC`{YWNEaNU%tA z!4p^YLD6ReKQl#-zc-&MdbwK?@VvTP4-!pqFIr44TB|?k$WRkSEtnUS6pL?ke+ujP z3OaNZ-qT;}ujbsbvwE%b?Vd3=O`NF=C1g{5RCU5W*7|r!Nd#pS_q8NNdo5FRmeOeB z*uYk$dpGSEc-7V<;u}4tpbWI=6)T&OPOgy+^Gd06y72DK$r+MqqMjwgLAQx)& zrx1uy$4+sEUuw~_kz?bB&lJ;Bk31itCcSUvrqH`&Fqk_Y{>;l5d-}B3%<IOq-7j$zZJbT1+tf&}9{BEQ=UiH?{Zmz!3M%R>fva^*mp&EzT6X+0 zcMj;>=B{_U2|sdmKQz8%751x=GTV_yz$a^Rz5$gDmAC&;C8(|tIm6e1+!pUj+V8G< z|DM{$Dr%bSZFxZwP&9i;%#aiAJu1V!!z0pNaU6UftWzBJD~1q96G>rnXj_;_{`!TfZ7>j-@lYio}T` zK2p%Q2Wg_}Ind~oy>WaE3s+sxl6m_IOX>Td}G-<@I_7$tr5KJ0E^x6uH3jajP&sqvEq%avIySZr<^OrKS*eKZ z!HH{HQEl6h?96K8^Pr3@ao+*Nx8dl|4bRq(&CN>AfneWVgJ?RFH<4q{c^85v>T~v@ zaZTmVXq@j-Ij_OFd??7yp5#5`>y5efzLR-fTs&L!E7>Y0(dqI#7(=+w@nc%c&aLnJ zB86JMy|$OX47SFy?}=EFO*DKe(2LqJns3n8ZqjqCq+5N_WvT@F5Z6L)Zp3BRdgn}D zaTH}}HedN%Ze4G&iePx6i1u-7bUbw?}_L>ZOFv0l#yg*x+sFtL%B^ z4v%Ck&RohPO>gsgmU(9SQZ|+veCt7JjicObvjA6drLr|HEn=vHG-i-313UJ;9VKXH zvUytex{TNA+l@{k3zeSC0ybHY#qOe0vZe~e&4F-mhqej@Z6CJP&PMjUzzV!uO@hL? zJzz`Pd3!r~4nB1JT66Vkw}i7O;9D8<%aKmKQp$HI;fn9yWEx8C*lk0G3O;VKr6q1$ zQTYk!np}navhJy$Fl9ods8U&eFN5eI85h%;Q_9mz(XRTPS?emcXdh`20$Z z-$5t6+%#&N(>HuqXQut%MYw{)`3Ns zj-jw4m2deCxiV8 zTev^=lc5lM>uF)g@laj)y5g z=v}t<`r1`S3py6Iu;JK=IVT@Vitu1B_JJBcwmkQ2IT@AP%zhL@O8rqvbh@;=$Y3D!<Ivl4r!?xqribHX ziz$SdJ;m0fvInTz%o9yNR{JLos+yNSj|RL6q%M=EDIKpZJ?Six(4czUezK@bII#pe z2V&@IRRfOwH9b@Ao&(VjAiMjn=RhW1t+>qL5hkHV+on7eO({r*$bOG^4@?M37*;qC zk!Uh(6uMUu|ngPB5H(-&pZYF8BMebCLvj^s_Z3nH^^M-EZBr zc9*#Ia`S6?rki2>4*M?c7G9b|$eKc>yh=Rp-3yO0J2z%$v*!3dIK|PZP0qQUD5`@Er zCGbhNXBEbI{H?5G&=9JgM0wsS;&*{(I7A0|`L*do`8;u8&jtg3nhS0ysE}an+~$04 zvA=-i{PkuwDdxBGq)lfUm2AaL-qNHNH^}Z|z2f7ql=9DRbbNav%dkM0&<35lZ>;r< z`{t864OBHgRuODY`mRLzqYkOCvYKF)QX34 zIiJ_N}Q6~lWxD_mF=mz zry_HM_hc6;iNx(^>vPt^k3A+6++&3+Cf#zN`?lEX@}N+N2Z8Q9F!&Ek{iSB@+`p|*HN6uBo|^FBOopOLtns+ul) zNaK_dw+_k68uTa8)5Gas35|`%F#!myaCS5fl#M~OV-P`)@qEyneXmHZ6W25|dk)l@ z4gHBQo>b_6a28s@d&gv%eg@wE9;SE$iWLaBNjQX16q;R49NV+2+6Et~*bd(gmy&dv zj-axXStmaSd>P%lT)&@6J3Z2cM@7{uW{fZRV)rD1mBgpTWWptBmMHCNx2;W{95+`6 z@DEhVeD@{`TjTD~-ZLLG?mA=dzwIThWG<~n68fZ9p)X3u4~=d9klV`JE$XcG4ebJZ zdH>6@8a^Y>_M$ zg%xS+K}xDK1Pvpmp>S^Pq$F zn9}DroYK9=$~&}6;A?Sl!?Edg@q9PHIwaiTH5RudXHT-ncE;~;(yHI9 zrI&d2h|2U*L}R}DDa;$90N2Bjo7vKpN}2xh7j3&s@>B2iyzX($NLctWL>oDpl}4TP z%yo*=`17?p-x#Y)xMyp^9|XvRR<~;ykH&JSGAr}&wtuE56e8QFojc<@P{l4~&G%0p zOU!PUF}{i#sL;FLzx`4_63JUFb&Rm-xts?aF|F1sPf=fSRE+2jk8P3tT~6qGmdqRP z`1So2Io1dvby@1&p!=nW(cCQvY3JkP4|n2822jQxr}p*2t6PK=Aqk#! zzok#zHImfAR%|7o?viEC-1s2cfhVz3C<#pq?27lqoy}YHS6?%8Q?0rAYzJ9y{=GF59>#iK}*6P4-pdb}Qy-C%hx&mYmxCx7t3$ zA!y5`_ae>5qx4lvzfYgBJrnx4F`wj@|EPY5l(*e3_}DkqcSmD(TUAm0F+)v8EE<4f zvE6{fLAXm_aoFh{k?b(R>$|!q`JpAEh_amhXmkVh-Az=jYyyAgf&^ZO>R%a9y}&o6 zaA-VEhfwo+mT+hw*GI9ssAcnn5Tv^&{c%ebB3&Q@4SR{_8o+<`!4q11mM%L{u&Zta zS@?7$0)z*ttH2Oo8JlM4K2&ZWWk)$7R!nvDb3+9^QdTzyb{V{(%Dv1k zpU!TqRlHA5{)TQ0ONVt!d@OfXVwLZKO}TxUVIR)Gd{ibkQ-gvO@#coi&6c#n4%x`i zSMliGDgUUlYMy&2@e^OHLVMv9napO3OUU@ns1Lp>yaaWsChVe7{E*eXaC$0*hz3h)-^34kK2rJ`Bla7iReV_+HjdU*vel@1>4K5+HPDNcuJW{(F1ysZq8_hl89c>BLUxZ-PMIo>!d#^RF~ z%VHUoykc&BfGVhp&iQKpt>uT{S83(+ecF{qs?C(-X)z$=`seiAI>jF3hhL)LGja*H)^yOPpcW7;;JESo7yzW&O{e#z+R{!9!kDDOx1bw|8WhaoN+ z`2VmDcP{WjSf+|`LEKRxjnm}Q;M0|y(sg6y9J>4#PKxo`2BIWlw}B zhl==D)||~1rvWPnvY3l)i0Vcji_5ziX|=XsiSc)8nNfEIE1GB*P-@Fw>sJ?zXK#tR zhsic`f0>LaL|tW9cW$(r_L~uzW6BEN*NZMK0XEzC?Zdue{Q(xX&}7WUILEd*F8;F9 zaYW_;%bImIr8k|G*x>Z1`ZBbeMEqCC63^f(H-{|y@DWz$nF9Jx)s=O@`;wy6xbpj( zMhT+oUj|cp3Y&1LLiD^66gc}byP*~AagtA~pBj&Am3d6-#>`nQIX^Gmwu)J9V>+_Q zcW%u80c6I&<(XoZ`SXW^tMqKKgo-U)qkOvMXsXK;N5+h(nFa!u>D_smnCGYj&yl99 zs{@?c1KH7g2r{`d;hM0oy;`vk8RtrO{q;t1gk1ZV0hUlc^p?MJ2h-^$%*D3cNQ~gd z*yP(h;d6j+*{rL@-|E-2e$PYa^+TV$u>y0Cy_%W*H}9OKr4~(Ajb3SY`G>e3TyEZf zOrMwkBx)`}>tHpCLsovGXmzx*o^NVZR{7!G=))xL7sBtWek~ptyHfBH$z9u&$<7z7 z%!seOu5FfhyB2wEIQ#V)rc7`!G%@yK16=HezpD!xYs~ zyf_-n)Tv^BHttA+Lr zq9!@2D7*&fD|o5qWsV*>oS7E?)=|w;LInmG;@*U13AeyJqTbBT_S?E1+BYQ_`;*Y& z<2g=;#i;%k(<+_s+B51pNmp~yd+QI(<&?}LwmEb&~WBa1s)8v2{cuIItV zEy}Z^(p_596H>8r!1#C740@LuN`9AG?OA$H59#L=^1D@wp3kn)yw4zfUzPV^?XpKJ z4;6CoZZ|h~$Zo-Adnx}FyNNswmJiBAm&xyYbmZlT$Y6%<#fX|=Ahk%kWqpNxO5j4N zFaZjh!ZVt97omdCyq-paW75A6=@s}y02(zR66>U|B3tc#HY7~Zpa|CI`adgFGE$}) z1m{)qQr-%K_-HL%i_EiHt@npi%38;7DD2q4uj;BWYAca$X5sxR-nVAdJ(5>0rsXqi zkjgj{2AScD>lxl;g3EOXY{T{X;g^(P2*y%e;FUm9;TA`(l=ApL+Hr!XKUVPR4No|( zP8eO41birFmKTj(l3N0EyUbri4#n|>l$Ve(4LvX2zDy$dYX4?*XTSh}xZ^?I(Hd_2 zTYNRuI!k7BnmB=zo}96k087VOJ7i~fO`TaDr~DgL@G_To7dQv*$dz6#4{@37>D+!` zvkh9H#@BZMHC0`DrG<}jXOoKu@L^d^^2fjJxKkLlSstJ8q<&v}pi-3K=T$*Eud)wA z~rc|5zM zv!$LGvJJY~wSlKceK) ztk^?6v88(Q1{P?T&(LHqyIqk0&l_t%x>k%dH=9F%1v;Y z^;6w~S{VZV{yLenp$ghr98zgmBvMha>x0l;w$EezejyQ8)+8hYyg9m|_$?N3H~?g| z5pW%AeDXgBx(wg(7R!2+fRY9p9Mt^Cecs5Ahok5a7PlVtD}r19U1&dQpLtPTZo!cd zv#tdm_)LSpf2$B;X^pvV5Mo{-t_K4_X9<;H#?@IIZ$fRu^-GnYplWQ+G+wtEh+0)J z-&58?KGMY-43napqvddEMd7p~9eSPw><=T2fKZIB44%*OYVsOA%ihcEl>P!XA>x8vbsyGlJ&WSZEE#FR9(X4ju+?Yf8gFg#Js(B%HY_ z-wftM2m9KEx3F@8MbG+WIAxACCzy zMtfE+qyt78LGfa^FeqTet*I?FHwPPayZh#)MO+%UG|v;2OK_@;B#uZZ2%6)rL=4;w z$4z4t0ZtZu`Z?DuDoP0e5Kkj+yE&Rf5Ka!fc4kIeW)4S`gD&YReNB4EtO>yF^alxd z!J)M5&ofC!3!Sk);j}oS@YokbyV?G4hawYQ0D99AGValzVt{h2J~_~ zr}@NUS8T0sj7JfnczQLcQgxEIcTw@@n4JA8g|pPbFC~d{AjEMx4h)))$XU`GlkBF* zU-2*vn%^o)rZZXPGFcl8v#IKOG?m(3Tc}5iFGRm#Q{@rz*`$D|`fl@^Dbk;DCQNGu z*%_*?0Hx6ThsL}+%jl&C70=CnvJv z+ItV*zV9?De&qh?KOfT{57F%Aw7N?9C8 z9Jxk%OLkCYbuPYNiclewP)h`?*(mF-N2T0=SH5_gu8TMCpmN)P=}!{{+a{}C*m%b@ zqP80nu@^ll__f6AE(J~G)7&iQ0(g77sEW3Yo~W71h^^nQupW>-kOu|fL(dVyeSeS1 zU1S2Y`v{mCu#kz)o&1|05ZtHN8-_6?PWZHU=l`CrwcJ^Z*x7OZsV1PRD8l-HQHer2 zLgF7&8#2;d`~(p9qz$!ysm`{Y15yK9IsI@N<|o=FBU{+JC6Gh=3K1}f^!wD={IVgJ zE=zc3nv_w3PA#O#^%)b1BEH3uU@jbAj11^$ieTagGy&l%;TpawiaI>Bjg_Zi*t`bZr46obpJz7M=>lHN%$iAs#rZk?}+YJJ~ zXdu2{h1ylk%=V8JfkD%VFGMRgD+9mk&@`e9G$nB3@Aa=_NZQlcw`a6xUW+DirM@YR zgHr@hg6QVFa=ic7V=_~?h_d{VBFo0OXJhbaxro0Ii8!gtE?RF~Geq`a+das}HrD#%rC#njBgbE|H7R9W-Y1r@721C>GCRBQe6-Wxev5%r3^(v(BGEKu@t0O>mbE+dHJ6Mv2 zp=EK{rIvkHvtCqyrpgmqv#0lvs@X)t10wb5@tb45BXF!xC@WdFdw-{JZ*(x9SII<6 z3`gmGIAIn$f4{DxJGh?nxj&EDf0*f}Roe(SUgB9bXn;sSkU$Y0U;@}IY#Pzuf|r!i zh|S$>CJ*nlOaGi2CI((j#K+Jt;vvKtv5A44?~3jrO`Ea|8JpB6GpP71KHK0)vL-nWDeDavG&i&xq#dpLtu1}i)8;6ye-9tMWykUQp(!}(j_Nd0UAQ~aI+(}oAHkb4*asJ;@^6?^||~r3D?=;Kg#q6ee>1V zb>9}fg;G->8*${?>L`Mx;aR7ux~c{NzQiW_lBO^|u!|R<_!>0ek4jNZ;D+{n_s5Xo zG!eeHZG)(F9geLcv6rhOi>(mxebYf!SdL+}qh(0Sm_&fec+Z@yFtJ zI=$?Qoq3ke^SHAN;SZcwWXIW3cG`uY80E>^E-!G{ASa5?Z<(e>t;{LVb{Zz0->K+^whqCLEzpXUByQaoVT_YB*`(*{kvv`SHU_&=JMen zP0k6dVysUqR6B14Hsa%Svez6co;P85B@ z$*W&)=46Eu`l8!J@64Y%=@pH)oCDu9P8F{+3mf@2W?Z@~v3d?TdKCe3j4b~uMUpL5 z+Oa=wyyUL-QEAe9@D#6O{-w7hf0F9TDRRiT0aB~KFbLAZzixwH4*ZUX4PGQ;@`j`F z<*GpJzr6q7JQDxSpqQxvX84xntBGhRD9-DISJqftRJBoiT@Ig`@6dGowy%uK@2Q)L zLDh%LswE1$rCyqy%=}WbFn>tCragY*)GI?1TUq5ED|BOZ=NwozPT#{;DysW9o3Q+7 z+sRw1eDCQ1nK@bNHhuGtfE$)iy)$=29%z_sg33mHQZ%|?qR=$GK9IU1IM6H+c6YyJjfG=pN(h`TSs(|;ICGeJ#$(wa0jnA{`U2%;rnzh;H&cY&5h4Y%xGRPOf>`)RB@xG ztrhRnHH1suc_8j^R(v@6KZ9IlcWCHM&ykW{VUWJgJI|*)PgtrB46UArbl!NEH#_9_ zqrQT?>B$DMV0cXZqEA$Hga2uM3qJ{x*KseG)h})dY5HE7(XJgz5Siy*diVB(3y>%L z)Ai=9s!11>xbeX3O^j2&2Hto|cVl)s zvt$zG9Y_`=?zy~bI@wT{Y$q4n0T|2Cs55(4Recsa?p|Mp(?3j<^dbye$S7Ome%j6q zlC9HVk2QV8wR4LOl0pm&v6#H5p_{e7uekys&z)q`(UO=`e5ept5LviUL-v?U{G zg{LwLtb{Z2W;Ento5C^1MLQ{|znN_vmq34huIFxsanZ!t^$if(qoG*#{LzHw@_{ve zpfln!Xx#|On`<;Zs$#xY8v|$ax5;s0>V9t)HL4>#`z02a=(yP zh{R|kKVEjqYYo_vIAhGhEHP%Zh<3*`)27&hXEm;P;sUw<9#ICtDEaUTg^AQmUj<5V zv8VnALS?3AhCg`VUmbFb?w`-6PKV14KjO#$q9Hy>Aq7+F zy0EB8k>?y-vs>CyeS(QgPAHYvAgrvMX=Mo`mw{Ez&IdFXO?z$wfcN!^V6qF!0xMz? z`^*!w1{>5NM%?1#I_^_Gpg{3_7!^r>l;#!TQnu}wcZ@ji~QaN#VlRt}N1??BhIloSI3ArwfkSD&SY$PuH zA}?!JG%phi8S6aT-znHl%{=W?u0AtNH+Xe{_oX(_|$A-K?Dh4d6 z!+|#{!{&%idQS@UpnGWaFf01b@C7*{P-#}QxA<0{@&tbt1xq+?ahUQ+i>gowA-=KJ z9|{t#yXJE|Mnj&WU0m`Z#(*b82Veo95p=?2fjmKh#EQ~gZq&&&XA4URGE7U{4QCpV!GeI-u_m)As=`D!p67N-19^c$Vg`(MqZPMSjX*Uu z(YrG76z04(t`Mo3B~+G423r1~8I3#q25m6bD2~i=v$%U@H-}HCvmSOk-@12Fmo%s& z%)caRK+2iRxvaEg%xEVZJjfiuyik3ONiD1^vn!i8Yf)Vzr0VvJcG}<1+9?O(FM_at z7+t;_09X%)KY{0ui$7j12g24c!Mh@|b~-Vg*mkAC-swE1OesBrwWwk1mhu8wW$Q$v zeS-3TQUbxl{LVZ1>8~&aeO)+%RtRhS4EuC!R-;~$_IkHG6;h2Z5ic~zbye{+9{-^i zCn8 zAo#r>#?`7k%{IZHF2o8u9fa|;BJ=7!sU|kU7phLDnr@ zDIWjkPYjr6l)ckGTS2|eMj=#umC8YRI+~AJo;i5>l6NI8Aw27X7Q|?E=h>(1@ax#% z`IPs?i&B63;(5a>S3SlxIo2N04UU@Uy>nJT1} zlch|47zr#+RM^7P^guH~2J0?&fy^WqfK}5Zc@Ld)Ddr}^81$uGrH8aa;FbwO^XARQ zU%q%n)^WnCrT*nQv%wl?INyUhRqmr7jE&iW0G7DM)jlcsboAIe*GR@=T-#H3ogm)T z)kfnIV}dg6H9D8~2G0c#aM8pBjMqA^Mu#i;#tg@gSy06`5TR{s;NL2fR;#%V*f$uA z67I`~ni8aSiZqe{Z1EQ>_fHip5#b=AhNGQJY2FEJM~8^g0dz*;Pk9fY)k$|h82Spm z{I)xr`d9oJN2bK17nylQX3&zghuGUBhMT>d;H6T(W`*7SAAbur{GHSM(`-5G5~p5d z1>>@6xE=Yc4jX+DZ5xt9srH2i>27wuA8oUr@_lz@%`pFgFNY!B*5o*Lt(w%jJ_H8J zk){_qeWAGOzE7>afo*?F&6x$|Yyv+|D!Lw-@iyFRI?0nNQy4fhyC41dOAZ0GJYEM~ zV4f~9`a&zHDgu0Xql}M}zyLiQzCD=89?!1ef{J|Culq*hll~cq8Aw}dmeL6K!L{wQ zON)%pPp3(T3lbA*D@iLjI(oEkMpGj?HV6>Gb*D2y3p{XqW`)8w7raDC5=4gFdq;Xw zVRN>AFnBj{&ga_$C5cqCVf;T~m?Fng;1}e2E2SP}Kf(yZ(hDHLow^W|E1l9Q2(}^J)V}d|h ze3URF2>k)IdF?K$ZeZ&Z6_xUV=YFcmMMA>Eg6R=_YfO96}L%zrrM?#u4T4gTX%lNi+ zw=0d=#a0TgZcA5*$ivp{;`F%glLMhp`QucxB!(<|K$k*DD?qmbRqsf{T&;`A z6V{P@8)D(D3<+~ zv4=zehTV(>kOw=S2WUijKu^v_8kwh}igOlZTsA`ZGxUt`fCf&P@jOx@^UMI}K1j0* z29{uTVYyk|c#yuuqxjcwrZi$|Tf?;;AwU%V<(F~ZDX;Do4q~h485OU;X{6Ts9vcj@ zT&7d*G!< zsIFpzM!*p*`A)>4sr)T+oGjjL+-V$r5t|9)QAo`#s>7p^w#FO76_b~roCCT-6HB_8 z7E<{!<5IRN-+!yUpJ6yN9B@o!@_s4M^ppMo((FfIaeGc+a5#TzN2X}|y|)fx(oq^$ zPpWya>f!S$z2D_5R`pTGhB)Jg0=0u)tj3Z^#NB1B;AqOPU*lREXFrg!9pIBbySi=- zgSgWSS=86eSD6^DM0!;YZ;HsA>p=^0Yp`a}5)4=`S6)K#SpRYFkSGn^>c|3QR|St! zzebgJoQ?d}+zQKrzVy`*IM&-U!isX2+rQ@o*AW9sE?m-A$PtNlW7KJRd*nLL19@UN z{pXRoWYSNMhLX$c5Fp?s)!@c+Y&$ef;ch?LJv$CgEZk=ntQ=FB5sL^%h}aJIXJ1d{ zN$n{z|G{IEb@*Rywg0x;@3yE`_utV^Y($^5hh)x%oRct8huPbzNJlZqR}S>{~A51ltg(B+{%_Q zpI`7D(HX_w*n@x6=H9oHZ_n!F7}P8>I&*4ehQDSN>?}l8ShkOaB>0mxpDZbs5A*AL z{OoX`KiR2yX19@h){%YhXN4tVP5Wf4Qom}OmR|#TvohjY6@@;rwztbrS!K;n=2d=G zyC{u{#4GhKHv3IxlL!G~3(I~XBfAY^{wbb<9w7hY1kZjxO$IJVN7aMWcYeL%n;&X7 zj^os<|Bfhg|xs`smm<%B$DKJ-Y8LMNtmy_zbXmJbE_Pg`&IvKT(_=hr$ z>aB8KpP0}sY^B)z&4doSv`CY(Kwn>jCBw#L@+q$P!>)y{;FPqXI)B?G&TZNR)acZi zH+lY&ezp&mM%Ba!bD||*C+yJQ0ZDdhd(48SX4oYaLFAND@mdx#yn?`XOAlOmnUz89Ckg8d2_k`vv?s*!YZq$SYN{OxX)_C^OG0ELoX)h0t;20QsxUGehh=w28eiFPT zT~`@HYOi+O{m>TY_nr+u`G$L=eNiim`3}+siaA{r;qBy>3aPo#x&~`w_D5w$krG9} znokKIsQTFXxR!DExJE==ZH+Sd#qCH&T79)PShF038Ix<81&ZoUc_^&VJk| zlZ!BfX|FLwmsC6`4yu@sSnX!TIDg2qx z_!6JHu4$TH+`j?RWySNE@1hI~KPm4A=GOQhH#EIS+>PI@bb652dQN1dCHI@veM|c7 zg-6e8tMCDvW-UlAEBIYvR1?S0x}q^bLXu8F?)c2gw${y@zLf+*_(*)C1M~!Zi1Kb&?y z1vBd*9AnLbcQ8EFID}DZ{&=f=Ehf|*IiZDSV{Yz7cHV3-CLp)rRN-nCBM_9X#nZG?nOza>8ps%<5# zE+^vy_E#qWo|ISCD_#uSv?(nWAgfv@T^qfpcuBBZ?<-G;j$zYxO zZmQxthzu_?tFXpPZwRcdKi(O+ z7+lS@W|ewoE)&E0^)u3#&Ic|!$2`VXhj|R8d96k8aDs&)eUGH_xxEb&en;ps9ZNl7p%vtHIi~vqp)}EIpF4HJ&XB?z0w_DrBZ00VJ9z$aRntZewjNsoUEj z-}a3`WMJXG_5Rp2yjG%-@HMS|QQ)3Ch{Tatru>-@+_rHK=OSC5xl;I*Pv3eg{?Av^eIu$3luPQ^? z^7kwZ$-k?wgUHrZWgKts`&Flq9gddN)q^zo1En^$8YX>2V2K(C*ueKf$T}z?UH{cW z&Y9T@%RidR)C--4RskPx1T-i}8MRx$4lw|cI))e#5_R{)prF6t6eDmki|peV z==`e{#Y~^xX%pm z-Papw%PB-F`Bm9H$8Yr($;PUZrLL9V*@|=8NG?V*+uz`_V(Tqo7rb`ibj1(a&xB4{ zYWOo|r98PHwQ8v^9?7CZ0#oV3iv2-T?Wa!Huzb<#FdX@0j8fRAcat`HExt7g8x6g@ zZ---viUs7}o$59-qQ290<;j4P$HMKD>J_!@*Z}vl$`i^knyr@%$3n3rrFVPKg_MN) zu;GA!?h;=${aY$>{BJJ?5?yrglU1Fjpx*Q=c*vMS!K(>@>e~v#H&x&F##f34F2rn{ z0N#rw^i1_@F@lLnFGXx|7r}cl$hBDe`*&pB+e7&MTyj1}3O|4DG15@sQty+kybDn| ztZzzHJq$X!PTXWW6dQ*(x_f?pAJc0;zFVOj>scXl@KQs%URHk6ctM9)*rAS>H6B zR8*#wXIPJdB%7H#1{m{>&srJgH7@oo_26Key)ya-=fj*E==tPo}Ab%8; z`U~BsVIl7;{fMCdcrMPCR9B2`=+^Zzcl~6TxWu2gl2iZ5382@OWR6v)JO%Pks`fWJ))*Vi)gk5&QHmJNexx3BA=FIP?$#2)b)MV!}X>X z^2tmhdJ(Z7H*J2~HPSP~FnMhrzIiWKHe;6!cKpj%W@D&iu+=kJJ z=0c~h{ecZo&s97@CGVxpP@9|Whgu?>D0YCZkt`Rt0Z>g^oZ{TUve17km>8*q=nDPW zw#WZMf6Qq4c}%-N`TTX*hd*yt*h#0C^hikZaGiTfws4Anv@9>|LNcix^W z{OWva`c}G$m=8%)vZ5V~2&X5DqPQ!*>l(YA(XYizRtR%>=ERaM_C?2z#wvzJ8^qku zw;G~9B7bR85mD9Jf^cm|q*i8Log48>Z525q z`>XGMhvM0kEWls}E5(i-QaVb}NWlYMt=S_}@rJvIH}ZR9V-_^FV3*eNi_v+%dGxnk zQLcYIw3P9nj0c4Q3Ih}dC=5^-pfEsTfWiQU0SW^Y1}F?r7@#mfVc@^Y0M*IV-vQk> Be=-07 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-8_hu_fb9d8494515bab6e.webp b/resources/_gen/images/images/blog/blog-8_hu_fb9d8494515bab6e.webp new file mode 100644 index 0000000000000000000000000000000000000000..2d5b0a7e8167fb601a51e567babbc2e12bb10d7e GIT binary patch literal 562 zcmV-20?qwWNk&F00ssJ4MM6+kP&il$0000G0000d001Wd06|PpNRR;l00EFgYuh17 z&;R|kwvCR~R_xu#w(Skg)XZ#eWZSlFd$+pl|AMZXotkLEh?oGfQ;jiM!dO6Td;+=3 z6b6Y)D7*ae_jmhRVdD{#c%q@hka+AV{TDcw474#e21{#AYI;(4#o{r~g*o>+FD8z4 z8lm4y$Fm{>egcVOS%j+A%oJlH=0-Vfg3XYKG1dTLJv?Sd1={>S!i(o7JqMGbQrbRB zJPWnzw>h`_;MeCjj_sJAR~R3a)V_Ej20*$@-mcLJ7@CohVM4vZLjmghe^V|9Qpscu z=OV+3csld6wHG$3=r4z|v0XFHc!^7uD!FsoTYI;hWBE{c0 z-#Hif>X!m?RO_}o(BJ!>v;}gOoqqi0+h2OWu<_`x;lVh(60`26RQ+4W_jfD-hV%mE z>zBtMG+Y1d-J8pc>tjusN&noxzfYe|Ak-Kuq#HmWPr>|v;4w>`>YILuHG~@@BBWaj z;0YM1vi|GaXkgWFfG`F9KG`lE#qT306=zAano#0FVR#odGH+04M-IS%$ew zDI_A78V4|w6@>JF0Dmkw3FFgid1ag7VHHQgz5oFJ^<@|PRJF$tk-*FHc0YiR%Z*pM zJ(z}hHnrRwFJAVKP&FUue$N%}U+wqqrMl+8u$*BcO8=!x2Z5jA(ii{kkA`Om08$tZ A761SM literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_14af2878d62e6e4e.webp b/resources/_gen/images/images/blog/blog-9_hu_14af2878d62e6e4e.webp new file mode 100644 index 0000000000000000000000000000000000000000..b45a65b397fb2b3cb528cc6237b898c72e9a16a6 GIT binary patch literal 46014 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

SzyV2pyHZaDM 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 RDmp~0xhKJY1aDjb0089}>HGiy literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/project/project-3_hu_27fb6f1fec031f75.webp b/resources/_gen/images/images/project/project-3_hu_27fb6f1fec031f75.webp new file mode 100644 index 0000000000000000000000000000000000000000..91c77817c3cf5e348e2384fb8716526caa7897dc GIT binary patch literal 88 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 Hlz;!(E`_!Z literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/project/project-3_hu_9d6702f14e8f2c3b.jpg b/resources/_gen/images/images/project/project-3_hu_9d6702f14e8f2c3b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..375c49bb7b30e00ad250de62846ff3012ed67160 GIT binary patch literal 92544 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


c2~Xd8$h;>g4fBMet_Jx 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 WexOfNt!?4c{U2MswpZkz>Hh-5=2P1M literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/project/project-3_hu_a2e987e158776bbc.webp b/resources/_gen/images/images/project/project-3_hu_a2e987e158776bbc.webp new file mode 100644 index 0000000000000000000000000000000000000000..dd598c4ebf68ba1411761422bf52f817548f9279 GIT binary patch literal 19392 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붻Jdc6JmuLJjj+~&H8$yS+?zWLfI$~>IaDD( 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 HUFZM++-%zM literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/project/project-3_hu_b861b80acfd7710c.jpg b/resources/_gen/images/images/project/project-3_hu_b861b80acfd7710c.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2096fac3b77c473161cbca904ea54a6485ea87d4 GIT binary patch literal 683 zcmex=Nsy6Qkn#T!#zhPajI4}czyJk|Ow25-Z0sDIT-*W-OpMITOf1Z-tSl@*m9;=Q z1{Oh9Aw@$+HsQcTcBMiQqsEB~Ih36?9uy6__(8=usi=vQOH5osQc6`#T|-mL#MI2( z!qUpw#nsK-!_zA`Bs45MA~GsDB{eNQBQvYGq_nKOqOz*FrM0cSqqA$$ z3M&~ka)>xhT)6Qdr?PR-2hpUWi(FzVCJ$9Vg1iLw5pf=BBFjf`55fKO{}uxeGb1p< zm<1W^8BV=*Sp3ra{=N)GR{gpwbM1dUn*MnKi+!NykFIi+^2PJ382q**Epg!q*;Y{1 zkRizP)#O0G+?Rx^E2pKHCvnQnTxxivlI!sDk3mdK>{(v(Tzs3eCb$(9&$(i;fdBtZ E0I-xXA^-pY literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/project/project-3_hu_e67ec575b7f17bcf.webp b/resources/_gen/images/images/project/project-3_hu_e67ec575b7f17bcf.webp new file mode 100644 index 0000000000000000000000000000000000000000..e7148f7876bd5e27a6739948fde3aa8fd40d5b2b GIT binary patch literal 53098 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 O`S8^w3LKf}NB{t~ntRUx literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_18953a22f9755bfc.webp b/resources/_gen/images/images/blog/blog-9_hu_18953a22f9755bfc.webp new file mode 100644 index 0000000000000000000000000000000000000000..a8af6e41701c55dfcfe45b37e9b0da5c0edc37d7 GIT binary patch literal 41646 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 Mr1K3msk8zA*`=`ilmGw# literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_26100c6d555ed19e.webp b/resources/_gen/images/images/blog/blog-9_hu_26100c6d555ed19e.webp new file mode 100644 index 0000000000000000000000000000000000000000..c84cc8799ecdfadc8b76e72bdca5350286e1c0b1 GIT binary patch literal 37692 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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_37b697b4c00fe908.webp b/resources/_gen/images/images/blog/blog-9_hu_37b697b4c00fe908.webp new file mode 100644 index 0000000000000000000000000000000000000000..da02d57985d7dd0198b37ace940e51746f2aaed5 GIT binary patch literal 33428 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≺k!xVYSYA$D! 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 M$||HDF;D;i0Grw^%K!iX literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_63ff821cf963806d.webp b/resources/_gen/images/images/blog/blog-9_hu_63ff821cf963806d.webp new file mode 100644 index 0000000000000000000000000000000000000000..f7040d43cdb1ddc21b5ddd8d64d29ca9aa4ef838 GIT binary patch literal 184 zcmV;p07w5)Nk&Gn00012MM6+kP&go@000261^}G_DkuOb06uLbi$fwI4mR2V5rblR zz$Z-6;2$!hmC~`zi{3gzXp>%m2jn*{CJZhIG~<7!{Bj(KcmVn1*(lFUZWfw${0&lq z__s|Hl&o}VZKJxfgZ&+%D^OUP8Ah4*keuH)o-=A1ny@vEy m6AKng+nTY`KK>*Z-A$cY9Mjr89@N24^m$SN{#!qu0001NAWh`} literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_8c09f6f21bbc597d.jpg b/resources/_gen/images/images/blog/blog-9_hu_8c09f6f21bbc597d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b885de5e7d65716e06da426213c9d2b434c497bc GIT binary patch literal 854 zcmex=Nsy6Qkn#T!#zhPajI4}czyJk|Ow25-Z0sDIT-*W-OpMITOf1Z-tSl@*m9;=Q z1{Oh9Aw@$+HsQcTcBMiQqsEB~Ih36?9uy6__(8=usi=vQOH5osQc6`#T|-mL#MI2( z!qUpw#nsK-!_zA`Bs45MA~GsDB{eNQBQvYGq_nKOqOz*FrM0cSqqA$$ z3M&~ka)>xhT)6Qdr?PR-2hpUWi(FzVCJ$9Vg1iLw5pf=BBFjf`55fKO{}uxeGb1p< zm<1W^8F&gOpSa^M?=@HVP?J${PolpUL&SBaNn*+TJQk`B%(G@J$U4z+L|LaHrSHLI zuBM$nLRyy^too15da;R*@tg9scDX~^BB`fSWcXS>Y0fMBviJu_@HE?6R`-qn8TM@D za9tT)cx$=(?Y&k)%C$>ARDHhJyiNJQ!LO@+sBYpvm9@<@duQ!*i}T6zG-X>dBKt32 zTg^5}RU+;AR&zGLlsm^an3gLYN}cOJ{ZoJ3m-D*&pRc}hy5;;Sahn7wbFQ8f(byHDQ|NXp2pcKU-t0fIar@(J0J}ru_2|I7^pYt+=S{G>KwTZ#d)(Ln z0Q5S*FXT{v%k=6`mk~8W0_FJOD$o3DZ8r&qV9t?iV73ORwQef6fsmPF8F8%H&6!{X z@-}6vncgzX+JJdyX&Lr^6x;K<|6wqi?VfzlEP-@n`&K!Hf4>2a(^`3_rHPgG?Hi(S zmJcH>24iPO6ze%T_*5IFx=AhNpDSk|8c~Deig!r-o(otN!$(? z>TDuu4$xB?(;Yo7vS*-n|Dgg;BO8_avnMU%oG!kG(U%>8&(H}*POY;Jkp4N*b!_NJ iIE|`p($ZI@lZrBMVad9Xq2#LT;iu?L1l19&JOBVx+_+u< literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_bae9a262462e5d36.webp b/resources/_gen/images/images/blog/blog-9_hu_bae9a262462e5d36.webp new file mode 100644 index 0000000000000000000000000000000000000000..f95920a34adde52c1220aea5e13949a1f1702f08 GIT binary patch literal 76004 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 K@R3RlCtv^!C~^7# literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_e62b76c2afdef019.jpg b/resources/_gen/images/images/blog/blog-9_hu_e62b76c2afdef019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb6d4addef6c0b89cac8051a28850ea244498eff GIT binary patch literal 65309 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�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 literal 0 HcmV?d00001 diff --git a/resources/_gen/images/images/blog/blog-9_hu_fbb56cc7010cbdda.jpg b/resources/_gen/images/images/blog/blog-9_hu_fbb56cc7010cbdda.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e19d62b62eae325c49e405f0873ece07336db8f GIT binary patch literal 787 zcmex=nAuRebI z{N?Mn?>~P2Vq{>3cn3&AJcQ&QL7;z_SXh`@*g^hbWGV+@WL#}LBYy^5T_NjRkoa<$@X`}K+1>J4r+03>Jx_a6MKjmQD+-MMqM;jp z#Yz}YobfZ|id}8wmB}pE@^~xH@fw?zeHRwU%w4zP&aBios>PA1Go^Mv_$m1=bZJRx z;a$zRt#1DcLOw@ommDZv=51N`_3~ShiO)lpCr$lu@7T(p>X+7go{vfwJ*n}kXzR*5 z_oGtew3*&r&$J1Tth{iI^?TJ!d3R;b%WSPNm!G|M3cXlvv+MW7Eh?97n!|nv#_}pp H_nAuRebI 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

LcmjT+zpi>(!C`U(^hFW(8Z)3VyNJsJbq=H{?W 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 literal 0 HcmV?d00001