This commit is contained in:
@@ -21,7 +21,9 @@ jobs:
|
||||
chmod 400 ssh-key
|
||||
export NIX_PATH=nixpkgs=flake:nixpkgs:/nix/var/nix/profiles/per-user/root/channels/nixos
|
||||
/run/current-system/sw/bin/nix-shell -p rsync openssh --run \
|
||||
'rsync -avz -e "ssh -oStrictHostKeyChecking=accept-new -i ssh-key" result/* deploy@andrew.riouxs.co:/srv/site'
|
||||
'rsync -avz -e "ssh -oStrictHostKeyChecking=accept-new -i ssh-key" result/{build,index.html,resources} deploy@andrew.riouxs.co:/srv/site'
|
||||
/run/current-system/sw/bin/nix-shell -p rsync openssh --run \
|
||||
'rsync -avz -e "ssh -oStrictHostKeyChecking=accept-new -i ssh-key" --ignore-existing result/articles/* deploy@andrew.riouxs.co:/srv/site/articles'
|
||||
|
||||
- name: Remove SSH key
|
||||
if: always()
|
||||
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
LINKS="$(ls articles/*.org | tac | head -n 10 | while read -r article; do
|
||||
TITLE="$(grep -E '^#\+TITLE:' "$article" | sed -e 's/^#+TITLE:\s*//')"
|
||||
DATE="$(git show --no-patch --no-notes --pretty='%as' `git rev-list -1 HEAD -- $article`)"
|
||||
echo '<li>'
|
||||
echo '<a href="'"${article/.org/}.html"'">'"<date>$DATE</date> - $TITLE"'</a>'
|
||||
echo '<p>'
|
||||
awk '/^\*\*+/ { found_header = 0; found_first_header = 1 } /.+/ { if (found_header) { print } } /^\* / { if (!found_first_header) { found_header = 1 } }' < "$article"
|
||||
echo '</p>'
|
||||
echo '</li>'
|
||||
done)"
|
||||
|
||||
if [ -f index.html.in ]; then
|
||||
FILE=index.html.in
|
||||
else
|
||||
FILE=index.html
|
||||
fi
|
||||
|
||||
awk '/LINK_INSERT/ { at_stop = 1 } { if (!at_stop) { print } }' < $FILE
|
||||
echo "$LINKS"
|
||||
awk '{ if (at_start) { print } } /LINK_INSERT/ { at_start = 1 }' < $FILE
|
||||
+10
-2
@@ -6,17 +6,25 @@ let
|
||||
text = builtins.readFile ./build/build-article.sh;
|
||||
};
|
||||
|
||||
build-index = pkgs.writeShellApplication {
|
||||
name = "build-index";
|
||||
text = builtins.readFile ./build/build-index.sh;
|
||||
};
|
||||
|
||||
|
||||
articles = pkgs.stdenv.mkDerivation {
|
||||
name = "articles";
|
||||
src = builtins.filterSource
|
||||
(path: type: !(pkgs.lib.strings.hasPrefix "result" (baseNameOf path)))
|
||||
./.;
|
||||
buildInputs = with pkgs; [ emacs git build-article ];
|
||||
buildInputs = with pkgs; [ emacs git build-article build-index ];
|
||||
|
||||
buildPhase = ''
|
||||
cp -a . $out
|
||||
cd $out
|
||||
find . -name '*.org' -exec build-article {} \;
|
||||
mv index.html index.html.in
|
||||
find . -name 'articles/*.org' -exec build-article {} \;
|
||||
build-index > index.html
|
||||
'';
|
||||
};
|
||||
in { inherit build-article articles; }
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Andrew Rioux</title>
|
||||
<link rel="stylesheet" href="/resources/index.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header class="hero">
|
||||
<div class="container">
|
||||
<h1>Andrew Rioux</h1>
|
||||
<p class="subtitle">
|
||||
Software Engineer & Security Researcher
|
||||
</p>
|
||||
<nav class="links">
|
||||
<a href="https://github.com/r-a303931">GitHub</a>
|
||||
<a href="https://gitea.riouxs.co/">Gitea</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<section>
|
||||
<h2>Projects</h2>
|
||||
|
||||
<div class="project-grid">
|
||||
<article class="project-card">
|
||||
<h3>Sparse</h3>
|
||||
<p>Bind shell and C2 beacon/server implementations using direct network access to evade firewalls and auditing</p>
|
||||
<ul class="tech-tags">
|
||||
<li>Rust</li>
|
||||
</ul>
|
||||
<div class="project-links">
|
||||
<a href="https://gitea.riouxs.co/andrew.rioux/sparse">Sparse</a>
|
||||
<a href="https://gitea.riouxs.co/andrew.rioux/sparse-v2">Sparse v2</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="project-card">
|
||||
<h3>Jiujitsu</h3>
|
||||
<p>System security and enumeration tool designed to run on systems plagued with adversaries</p>
|
||||
<ul class="tech-tags">
|
||||
<li>Rust</li>
|
||||
<li>Nix</li>
|
||||
<li>ELK</li>
|
||||
<li>Wazuh</li>
|
||||
</ul>
|
||||
<div class="project-links">
|
||||
<a href="https://github.com/luccdc/jj-rs">Source Code</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="project-card">
|
||||
<h3>CAP Event Manager</h3>
|
||||
<p>Event management and reporting system for Civil Air Patrol units</p>
|
||||
<ul class="tech-tags">
|
||||
<li>TypeScript</li>
|
||||
<li>Docker</li>
|
||||
</ul>
|
||||
<div class="project-links">
|
||||
<a href="https://github.com/cap-md089/evmplus-v6">Source Code</a>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Recent Articles</h2>
|
||||
<ul class="article-list">
|
||||
LINK_INSERT
|
||||
</ul>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container">
|
||||
<p>
|
||||
© 2026 Andrew Rioux
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,157 @@
|
||||
:root {
|
||||
--bg: #1e1e2e;
|
||||
--bg-alt: #2a2a3a;
|
||||
--bg-alt-2: #4a4a5a;
|
||||
--fg: #e0e0e0;
|
||||
--accent: #8aadf4;
|
||||
--muted: #a0a0a0;
|
||||
--border: #3a3a4a;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
background: var(--bg);
|
||||
color: var(--fg);
|
||||
font-family: "Inter", "Segoe UI", system-ui, sans-serif;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: min(70rem, calc(100% - 2rem));
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.hero {
|
||||
border-bottom: 1px solid var(--border);
|
||||
padding: 5rem 0 4rem;
|
||||
}
|
||||
|
||||
.hero h1 {
|
||||
margin: 0;
|
||||
font-size: clamp(2.5rem, 6vw, 4rem);
|
||||
font-weight: 700;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
margin-top: 0.5rem;
|
||||
color: var(--muted);
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.intro {
|
||||
max-width: 42rem;
|
||||
margin-top: 2rem;
|
||||
font-size: 1.05rem;
|
||||
}
|
||||
|
||||
.links {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 3rem 0;
|
||||
}
|
||||
|
||||
section + section {
|
||||
margin-top: 4rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin-bottom: 1.5rem;
|
||||
color: var(--accent);
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
.project-grid {
|
||||
display: grid;
|
||||
gap: 1.5rem;
|
||||
grid-template-columns: repeat(
|
||||
auto-fit,
|
||||
minmax(18rem, 1fr)
|
||||
);
|
||||
}
|
||||
|
||||
.project-card {
|
||||
background: var(--bg-alt);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 10px;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.project-card h3 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.project-card p {
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
|
||||
.project-links {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.article-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.article-list li {
|
||||
background: var(--bg-alt);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 10px;
|
||||
padding: 1.25rem;
|
||||
}
|
||||
|
||||
.article-list li + li {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.article-list p {
|
||||
margin-bottom: 0;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
a,
|
||||
a:visited {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
border-bottom: 1px dashed var(--accent);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
border-bottom-style: solid;
|
||||
}
|
||||
|
||||
footer {
|
||||
border-top: 1px solid var(--border);
|
||||
margin-top: 4rem;
|
||||
padding: 2rem 0;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.hero {
|
||||
padding-top: 3rem;
|
||||
}
|
||||
|
||||
.links {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Andrew Rioux</title>
|
||||
<link rel="stylesheet" href="/resources/index.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header class="hero">
|
||||
<div class="container">
|
||||
<h1>Andrew Rioux</h1>
|
||||
<p class="subtitle">
|
||||
Software Engineer & Security Researcher
|
||||
</p>
|
||||
<nav class="links">
|
||||
<a href="https://github.com/r-a303931">GitHub</a>
|
||||
<a href="https://gitea.riouxs.co/">Gitea</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container">
|
||||
<section>
|
||||
<h2>Projects</h2>
|
||||
|
||||
<div class="project-grid">
|
||||
<article class="project-card">
|
||||
<h3>Sparse</h3>
|
||||
<p>Bind shell and C2 beacon/server implementations using direct network access</p>
|
||||
<ul class="tech-tags">
|
||||
<li>Rust</li>
|
||||
</ul>
|
||||
<div class="project-links">
|
||||
<a href="https://gitea.riouxs.co/andrew.rioux/sparse">Sparse</a>
|
||||
<a href="https://gitea.riouxs.co/andrew.rioux/sparse-v2">Sparse v2</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="project-card">
|
||||
<h3>Jiujitsu</h3>
|
||||
<p>System security and enumeration tool designed to run on systems plagued with adversaries</p>
|
||||
<ul class="tech-tags">
|
||||
<li>Rust</li>
|
||||
<li>Nix</li>
|
||||
<li>ELK</li>
|
||||
<li>Wazuh</li>
|
||||
</ul>
|
||||
<div class="project-links">
|
||||
<a href="https://github.com/luccdc/jj-rs">Source Code</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="project-card">
|
||||
<h3>CAP Event Manager</h3>
|
||||
<p>Event management and reporting system for Civil Air Patrol units</p>
|
||||
<ul class="tech-tags">
|
||||
<li>TypeScript</li>
|
||||
<li>Docker</li>
|
||||
</ul>
|
||||
<div class="project-links">
|
||||
<a href="https://github.com/cap-md089/evmplus-v6">Source Code</a>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Recent Articles</h2>
|
||||
<ul class="article-list">
|
||||
<li>
|
||||
<a href="articles/20251017-direct-network-access.html"><date>2025-10-17</date> - Direct Network Access and Market Applications</a>
|
||||
<p>
|
||||
Direct network access is a technique that can be used to decrease the likelihood of detecting malicious network traffic on an endpoint. It can be seen as an extension of the MITRE ATT&CK technique T1205 Traffic Signaling, as it allows a threat actor to either respond to signaled traffic or to initiate traffic.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container">
|
||||
<p>
|
||||
© 2026 Andrew Rioux
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user