daemon-sec-lotl

DÆMONBins: GTFOBins × LOLBAS × WADComs × LOOBins in one filterable catalog
git clone https://git.daemon-sec.xyz/daemon-sec-lotl.git
Log | Files | Refs | Submodules | README | LICENSE

index.astro (7454B)


      1 ---
      2 import Base from '../layouts/Base.astro';
      3 import HeroDeck from '../components/HeroDeck.astro';
      4 import Marquee from '../components/Marquee.astro';
      5 import Callout from '../components/Callout.astro';
      6 import facets from '../data/facets.json';
      7 import { SOURCES, SOURCE_META, SOURCE_ROUTE, PLATFORMS, PLATFORM_META } from '../lib/taxonomy';
      8 import { url } from '../lib/url';
      9 import { website, dataset } from '../lib/jsonld';
     10 
     11 const c = facets.counts;
     12 
     13 const marqueeTitles = [
     14   { n: 'NIX', title: 'GTFOBins', accent: 'foam' },
     15   { n: 'WIN', title: 'LOLBAS', accent: 'iris' },
     16   { n: 'AD', title: 'WADComs', accent: 'gold' },
     17   { n: 'MAC', title: 'LOOBins', accent: 'rose' },
     18   { n: 'DMN', title: 'DÆMON', accent: 'love' },
     19   { n: '01', title: 'SUID · sudo', accent: 'gold' },
     20   { n: '02', title: 'AWL Bypass', accent: 'iris' },
     21   { n: '03', title: 'ADCS · ESC', accent: 'gold' },
     22   { n: '04', title: 'Coercion', accent: 'love' },
     23 ];
     24 const marqueeMeta = [
     25   { tag: 'gtfo', text: `${c.bySource.GTFOBins} techniques`, accent: 'foam' },
     26   { tag: 'lolbas', text: `${c.bySource.LOLBAS} techniques`, accent: 'iris' },
     27   { tag: 'wadcoms', text: `${c.bySource.WADComs} upstream`, accent: 'gold' },
     28   { tag: 'daemon', text: `${c.added} authored here`, accent: 'love' },
     29   { tag: 'mitre', text: 'ATT&CK mapped', accent: 'pine' },
     30   { tag: 'gpl', text: 'GPL-3.0', accent: 'rose' },
     31 ];
     32 
     33 const platformStats = PLATFORMS.filter((p) => c.byPlatform[p]).map((p) => ({
     34   label: p,
     35   accent: PLATFORM_META[p].accent,
     36   n: c.byPlatform[p],
     37 }));
     38 ---
     39 <Base
     40   title="DÆMONBins — the Off-the-Land Almanac"
     41   description="One filterable catalog merging GTFOBins, LOLBAS, WADComs and LOOBins — plus DÆMON additions. Living-off-the-land and offensive techniques by platform, access, environment and evidence state."
     42   jsonLd={[website(Astro.site), dataset(Astro.site, c, facets.commits)]}
     43 >
     44   <HeroDeck />
     45 
     46   <Marquee titles={marqueeTitles} meta={marqueeMeta} manifest={`${c.techniques} techniques`} />
     47 
     48   <section class="home-platforms wrap">
     49     <h2 class="eyebrow" style="--acc: var(--foam);">
     50       <span class="eyebrow__n">01</span>
     51       <span class="eyebrow__mark">^:</span>
     52       <span>By platform</span>
     53       <span class="eyebrow__rule" aria-hidden="true"></span>
     54     </h2>
     55     <div class="home-platforms__grid">
     56       {platformStats.map((p) => (
     57         <div class="home-platstat" data-reveal style={`--acc: var(--${p.accent});`}>
     58           <b data-count={p.n}>{p.n.toLocaleString()}</b>
     59           <span>{p.label}</span>
     60         </div>
     61       ))}
     62     </div>
     63   </section>
     64 
     65   <section class="home-sources wrap">
     66     <h2 class="eyebrow" style="--acc: var(--iris);">
     67       <span class="eyebrow__n">02</span>
     68       <span class="eyebrow__mark">^:</span>
     69       <span>The collections</span>
     70       <span class="eyebrow__rule" aria-hidden="true"></span>
     71     </h2>
     72     <div class="home-sources__grid">
     73       {SOURCES.map((id, i) => {
     74         const s = SOURCE_META[id];
     75         return (
     76           <a class="home-source" data-reveal href={url(SOURCE_ROUTE[id])} style={`--acc: var(--${s.accent});`}>
     77             <div class="home-source__top">
     78               <span class="home-source__tag">{String(i + 1).padStart(2, '0')} · {s.tag}</span>
     79               <span class="home-source__n">{c.bySource[id] ?? 0}</span>
     80             </div>
     81             <h3 class="home-source__name">{s.label}</h3>
     82             <p class="home-source__blurb">{s.blurb}</p>
     83             <span class="home-source__go">Browse {s.label} →</span>
     84           </a>
     85         );
     86       })}
     87     </div>
     88   </section>
     89 
     90   <section class="home-scope wrap">
     91     <Callout tone="warning" label="Scope">
     92       Everything here is placeholder-only reference material — lab IPs, <code>test.local</code>,
     93       <code>john</code> / <code>password123</code> — in the same spirit as GTFOBins, LOLBAS, WADComs and
     94       MITRE ATT&CK. For authorized testing, CTFs, detection engineering and education only. Know your scope.
     95     </Callout>
     96     <p class="home-scope__cred">
     97       GTFOBins, LOLBAS, WADComs and LOOBins are GPL-3.0 projects; this merged work is GPL-3.0. See <a href={url('credits')}>credits &amp; licenses</a>.
     98     </p>
     99   </section>
    100 </Base>
    101 
    102 <style>
    103   /* The section eyebrows are h2s so the page outlines h1 → h2 → h3 for
    104      heading navigation; they keep the <p> eyebrow's metrics exactly. */
    105   h2.eyebrow { margin: 1em 0; font-weight: 400; }
    106 
    107   /* ---- By platform -------------------------------------------------------- */
    108   .home-platforms { margin: clamp(2.6rem, 5vw, 4rem) auto 0; }
    109   .home-platforms__grid {
    110     margin-top: 1rem;
    111     display: grid;
    112     grid-template-columns: repeat(4, 1fr);
    113     gap: 1px;
    114     background: var(--rule);
    115     border: 1px solid var(--rule);
    116   }
    117   @media (max-width: 560px) { .home-platforms__grid { grid-template-columns: repeat(2, 1fr); } }
    118   .home-platstat {
    119     background: var(--bg);
    120     padding: 1.4rem 1.2rem;
    121     border-top: 2px solid var(--acc);
    122   }
    123   .home-platstat b {
    124     display: block;
    125     font-family: var(--font-display);
    126     font-weight: 800;
    127     font-stretch: 84%;
    128     font-size: clamp(1.8rem, 4vw, 2.7rem);
    129     letter-spacing: -0.03em;
    130     line-height: 1;
    131     color: var(--acc);
    132     font-variant-numeric: tabular-nums;
    133   }
    134   .home-platstat span {
    135     display: block;
    136     margin-top: 0.4rem;
    137     font-family: var(--font-mono);
    138     font-size: 11px;
    139     letter-spacing: 0.14em;
    140     text-transform: uppercase;
    141     color: var(--fg-faint);
    142   }
    143 
    144   /* ---- The collections ---------------------------------------------------- */
    145   .home-sources { margin: clamp(2.6rem, 5vw, 4rem) auto 0; }
    146   .home-sources__grid {
    147     display: grid;
    148     grid-template-columns: repeat(2, 1fr);
    149     gap: 1px;
    150     background: var(--rule);
    151     border: 1px solid var(--rule);
    152     margin-top: 1rem;
    153   }
    154   @media (max-width: 720px) { .home-sources__grid { grid-template-columns: 1fr; } }
    155   .home-source {
    156     display: flex;
    157     flex-direction: column;
    158     gap: 0.6rem;
    159     padding: 1.5rem 1.5rem 1.4rem;
    160     background: var(--bg);
    161     text-decoration: none;
    162     color: var(--fg);
    163     position: relative;
    164   }
    165   .home-source::before {
    166     content: '';
    167     position: absolute;
    168     top: 0; left: 0;
    169     width: 100%; height: 3px;
    170     background: var(--acc);
    171     transform: scaleX(0);
    172     transform-origin: left;
    173     transition: transform 220ms var(--ease);
    174   }
    175   .home-source:hover::before { transform: scaleX(1); }
    176   .home-source__top { display: flex; align-items: center; justify-content: space-between; }
    177   .home-source__tag { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--acc); }
    178   .home-source__n { font-family: var(--font-mono); font-size: 12px; color: var(--fg-faint); }
    179   .home-source__name { font-family: var(--font-display); font-weight: 800; font-stretch: 84%; text-transform: uppercase; letter-spacing: -0.02em; font-size: clamp(24px, 3.5vw, 34px); margin: 0; color: var(--fg); }
    180   .home-source__blurb { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--fg-dim); }
    181   .home-source__go { margin-top: auto; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--acc); }
    182 
    183   /* ---- Scope -------------------------------------------------------------- */
    184   .home-scope { margin: clamp(2.6rem, 5vw, 4rem) auto 5rem; }
    185   .home-scope__cred { margin-top: 1rem; font-size: 13px; color: var(--fg-dim); }
    186   .home-scope__cred a { color: var(--accent); }
    187 </style>