diff --git a/404.html b/404.html index 87b3bdcd..2c7887e0 100644 --- a/404.html +++ b/404.html @@ -1,131 +1,3 @@ -404 Page not found - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

404

\ No newline at end of file +404 Page not found - lavafroth

404

\ No newline at end of file diff --git a/about/index.html b/about/index.html index 01e46ece..a313cb24 100644 --- a/about/index.html +++ b/about/index.html @@ -1,134 +1,6 @@ -whoami - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

whoami

How lethal can a bored eight-year-old with eyes glued to a computer screen be? +whoami - lavafroth

whoami

How lethal can a bored eight-year-old with eyes glued to a computer screen be? Fasten your seatbelts, I’ve got first-hand experience. It all began with making “fake” malware in the batch programming language to annoy family members. I learned some web design and some C before spending eight semesters on a Java diff --git a/app.min.css b/app.min.css index 18b8edfa..188419aa 100644 --- a/app.min.css +++ b/app.min.css @@ -1 +1 @@ -:root{--gap:2.5rem;--y-gap:8rem;--wide:140rem;--narrow:80rem;--side:calc((var(--wide) - var(--narrow)) / 2);--header:8rem;--footer:calc(8rem + var(--safe-bottom));--light:255, 255, 255;--dark:22, 22, 22;--hljs-bg:#111;--safe-bottom:0}@supports(bottom:constant(safe-area-inset-bottom)){:root{--safe-bottom:constant(safe-area-inset-bottom)}}@supports(bottom:env(safe-area-inset-bottom)){:root{--safe-bottom:env(safe-area-inset-bottom)}}.dark{--light:22, 22, 22;--dark:255, 255, 255;--hljs-bg:#282828}*,*::before,*::after{box-sizing:border-box}html,body{height:100%}html{-webkit-tap-highlight-color:transparent;font-size:8px}body{--white:rgba(var(--light), 1);--black:rgba(var(--dark), 1);--pro:rgba(var(--dark), 1);--lit:rgba(var(--dark), 0.64);--air:rgba(var(--dark), 0.48);--fog:rgba(var(--dark), 0.12);display:flex;flex-direction:column;padding-right:var(--gap);padding-left:var(--gap);margin:0;font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen,Ubuntu,Cantarell,open sans,helvetica neue,sans-serif;font-size:2rem;line-height:1.8;color:var(--pro);word-break:break-word;background:var(--white);transition:background .4s ease-out}body>*{flex-shrink:0;width:100%;margin-inline:auto}.not-ready,.not-ready *{transition:none!important}@media(max-width:1199px){html{font-size:7px}}h1,h2,h3,h4,h5,h6{margin:0;font-size:inherit;font-weight:700;line-height:1.2}p{margin:0}strong,b{font-weight:500}ul,ol{padding:0;margin:0}a{color:inherit;text-decoration:none}table{width:100%;border-spacing:0;border-collapse:collapse}button,input,textarea{padding:0;font:inherit;background:0 0;border:0;outline:0;-webkit-appearance:none}button,input[type=button],input[type=submit]{cursor:pointer}input,textarea{padding:0;border:0}input:-webkit-autofill,textarea:-webkit-autofill{box-shadow:0 0 0 6rem var(--white)inset}img{display:block;max-width:100%}site-header{display:flex;max-width:var(--wide);height:var(--header);font-family:LeagueGothic;text-transform:uppercase;letter-spacing:1rem}site-header a{display:flex;flex-shrink:0;align-items:center}hero{margin-top:5.5rem;margin-left:var(--gap);display:flex;min-width:var(--side);padding-right:var(--gap)}.site-name{overflow:hidden;font-size:3.4rem;font-weight:700;white-space:nowrap}.btn-dark{width:3rem;margin-left:2rem;cursor:pointer;background:url(./theme.png)0/auto 3rem no-repeat;transition:background-position .4s steps(5)}.dark .btn-dark{background-position:100%}nav{display:flex;margin-left:auto;gap:1rem}nav a{width:1rem;height:1rem;padding:1.75rem;border:2px solid #0000;background:var(--url)center center no-repeat}nav a.active{outline:2px solid #000;border-radius:50%}.dark nav a{filter:invert(1)}@media(max-width:1199px){hero{min-width:auto}[data-menu=true]{--header:16rem}[data-menu=true] site-header{position:relative}[data-menu=true] site-header>*{height:calc(var(--header)/4)}[data-menu=true] .menu{position:absolute;inset:auto 0 0;border-bottom:1px solid var(--fog)}}.main{max-width:var(--narrow);min-height:calc(100% - var(--header) - var(--footer));padding-top:var(--y-gap);padding-bottom:var(--y-gap)}.main-title{margin-bottom:calc(var(--y-gap) + 1rem);font-size:3rem;font-weight:400;color:var(--lit)}paginator{display:flex;margin-top:5rem}paginator a{font-size:1.8rem;line-height:5.5rem;color:var(--white);background:var(--black);border-radius:.5rem;padding-inline:3rem}paginator .next{margin-left:auto}.post-entry{position:relative;padding-block:2rem;transition:transform .1s}.post-entry:first-of-type{margin-top:-2rem}.post-entry:active{transform:scale(.99)}.post-entry h2{margin-bottom:.2rem;font-size:3rem}.post-entry time{flex-shrink:0;font-size:1.7rem;color:var(--air)}.post-entry a{position:absolute;inset:0}.post-title{margin-bottom:calc(var(--y-gap) + 1rem)}.post-title p{display:flex;margin-bottom:1.5rem;font-size:1.6rem;color:var(--air);transform:translateY(.4rem)}.post-title p span::before{content:'·';margin-inline:.8rem}.post-title h1{font-size:5rem;transform:translateX(-.3rem)}.post-tags{margin-top:7rem}.post-tags a{display:inline-block;font-weight:500;line-height:5rem;color:var(--lit);background:rgba(var(--dark),.05);border-radius:.5rem;padding-inline:2rem}.post-tags a+a{margin-left:.5rem}post-nav{display:flex;justify-content:space-between;margin-top:var(--y-gap);background:rgba(var(--dark),.05);border-radius:.5rem}post-nav a{display:flex;align-items:center;width:50%;padding:var(--gap);font-size:2.4rem;font-weight:700;line-height:1.2}post-nav a span+span{margin-left:1rem}post-nav .prev{padding-right:1rem}post-nav .next{justify-content:flex-end;padding-left:1rem;margin-left:auto}.post-comments{margin-top:var(--y-gap)}@media(max-width:1199px){.post-title{display:block}.post-title aside{flex-direction:row;width:auto;padding-right:0;margin-bottom:.5rem;margin-left:0;transform:none}.post-title aside span::before{content:'·';margin-inline:.5rem}}.post-content{font-size:2.2rem}.post-content h1,.post-content h2,.post-content h3,.post-content h4,.post-content h5,.post-content h6{margin-block:2rem}.post-content h1{margin-top:var(--y-gap);font-size:4.5rem}.post-content h2{margin-top:6rem;font-size:3.5rem}.post-content h3{font-size:2.5rem}.post-content h4{font-size:2.2rem}.post-content h5{font-size:1.8rem}.post-content h6{font-size:1.5rem}.post-content img{margin-inline:auto}.post-content a{padding-bottom:.2rem;font-weight:500;border-bottom:2px solid var(--pro)}.post-content a code{margin-inline:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.post-content del{text-decoration:none;background:linear-gradient(to right,var(--pro) 100%,transparent 0)0/1px 1px repeat-x}.post-content p,.post-content ul,.post-content ol,.post-content dl,.post-content details{margin-bottom:3rem}.post-content ul,.post-content ol{padding-left:2.5rem}.post-content li{margin-top:.6rem}.post-content li p{margin-bottom:0}.post-content dl{display:flex;flex-wrap:wrap;margin:0}.post-content dt{width:25%;font-weight:500}.post-content dd{width:75%;padding-left:1.3rem;margin-left:0}.post-content dt~dt,.post-content dd~dd{margin-top:1.3rem}.post-content table{margin-bottom:4rem}.post-content table th,.post-content table:not(.highlighttable) td{min-width:10rem;padding:1.5rem 1rem;line-height:1.5;border-bottom:1px solid var(--fog)}.post-content table th{font-size:1.6rem;text-align:left}.post-content table:not(.highlighttable) td code:only-of-type{margin-inline:0}.post-content .highlight,.post-content pre{margin:0 calc(var(--gap) * -1)4rem;overflow-x:auto;background:var(--hljs-bg)!important;border-radius:.5rem}.post-content ul pre{margin-left:calc(var(--gap) * -2)}.post-content .highlight pre{margin-inline:0;margin-bottom:0}.post-content .highlighttable{table-layout:fixed}.post-content .highlighttable td:first-of-type{width:5rem}.post-content .highlighttable td .linenodiv{padding-right:0!important}.post-content .highlighttable td .linenodiv pre,.post-content .highlighttable td .highlight{margin-bottom:0}.post-content .highlighttable td .highlight pre code::-webkit-scrollbar{display:none}.post-content .highlight span{background:0 0!important}.post-content code{padding:.5rem 1rem;margin-inline:.5rem;font-family:Menlo,Monaco,courier new,Courier,monospace;font-size:.8em;line-height:1.5;background:rgba(var(--dark),.06);border-radius:.3rem}.post-content pre code{display:block;padding:var(--gap);margin-inline:0;color:rgba(255,255,255,.8);background:0 0;border-radius:0}.post-content blockquote{padding:0 0 0 calc(var(--gap) - .4rem);margin:0 0 0 calc(var(--gap) * -1);border-left:.4rem solid var(--pro)}.post-content hr{height:1px;background:var(--fog);border:0;margin-block:12rem}.post-content iframe{width:100%;background:var(--black)}.footer{display:flex;align-items:center;justify-content:center;max-width:var(--narrow);height:var(--footer);padding-bottom:var(--safe-bottom);margin-top:auto;font-size:1.6rem;color:var(--lit);border-top:1px solid var(--fog)}.footer p+p::before{content:'·';margin-inline:.6rem}.footer a:hover{color:var(--pro);border-bottom:1px solid var(--pro)}.title-404{display:flex;align-items:center;justify-content:center;height:100%;padding-bottom:8rem;font-size:16rem}site-header{z-index:1;--lava-background:var(--black);display:grid;position:relative;min-height:15rem;border-radius:1rem;width:100%;overflow:hidden}.lavasource{width:100%;height:4rem;background:var(--black)}site-header .bubbles{position:absolute;top:13rem;left:0;right:0;height:1rem;background:var(--lava-background);filter:url(#blob)}site-header .bubbles bubble{position:absolute;left:var(--position,50%);background:var(--lava-background);border-radius:100%;-webkit-animation:bubble-size var(--time,4s)ease-in infinite var(--delay,0s),bubble-move var(--time,4s)ease-in infinite var(--delay,0s);animation:bubble-size var(--time,4s)ease-in infinite var(--delay,0s),bubble-move var(--time,4s)ease-in infinite var(--delay,0s);transform:translate(-50%,100%)}@-webkit-keyframes bubble-size{0%,75%{width:var(--size,4rem);height:var(--size,4rem)}100%{width:0;height:0}}@keyframes bubble-size{0%,75%{width:var(--size,4rem);height:var(--size,4rem)}100%{width:0;height:0}}@-webkit-keyframes bubble-move{0%{bottom:-4rem}100%{bottom:var(--distance,10rem)}}@keyframes bubble-move{0%{bottom:-4rem}100%{bottom:var(--distance,10rem)}}@font-face{font-family:LeagueGothic;src:url(LeagueGothic.ttf)} \ No newline at end of file +:root{--gap:2.5rem;--y-gap:8rem;--wide:140rem;--narrow:80rem;--side:calc((var(--wide) - var(--narrow)) / 2);--header:8rem;--footer:calc(8rem + var(--safe-bottom));--light:255, 255, 255;--dark:22, 22, 22;--hljs-bg:#111;--safe-bottom:0}@supports(bottom:constant(safe-area-inset-bottom)){:root{--safe-bottom:constant(safe-area-inset-bottom)}}@supports(bottom:env(safe-area-inset-bottom)){:root{--safe-bottom:env(safe-area-inset-bottom)}}.dark{--light:22, 22, 22;--dark:255, 255, 255;--hljs-bg:#282828}*,*::before,*::after{box-sizing:border-box}html,body{height:100%}html{-webkit-tap-highlight-color:transparent;font-size:8px}body{--white:rgba(var(--light), 1);--black:rgba(var(--dark), 1);--pro:rgba(var(--dark), 1);--lit:rgba(var(--dark), 0.64);--air:rgba(var(--dark), 0.48);--fog:rgba(var(--dark), 0.12);display:flex;flex-direction:column;padding-right:var(--gap);padding-left:var(--gap);margin:0;font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen,Ubuntu,Cantarell,open sans,helvetica neue,sans-serif;font-size:2rem;line-height:1.8;color:var(--pro);word-break:break-word;background:var(--white);transition:background .4s ease-out}.sidebar-nav-item{}body>*{flex-shrink:0;width:100%;margin-inline:auto}.not-ready,.not-ready *{transition:none!important}@media(max-width:1199px){html{font-size:7px}}h1,h2,h3,h4,h5,h6{margin:0;font-size:inherit;font-weight:700;line-height:1.2}p{margin:0}strong,b{font-weight:500}ul,ol{padding:0;margin:0}a{color:inherit;text-decoration:none}table{width:100%;border-spacing:0;border-collapse:collapse}button,input,textarea{padding:0;font:inherit;background:0 0;border:0;outline:0;-webkit-appearance:none}button,input[type=button],input[type=submit]{cursor:pointer}input,textarea{padding:0;border:0}input:-webkit-autofill,textarea:-webkit-autofill{box-shadow:0 0 0 6rem var(--white)inset}img{display:block;max-width:100%}.header{display:flex;max-width:var(--wide);height:var(--header)}.header a{display:flex;flex-shrink:0;align-items:center}.logo{z-index:1000;margin-top:5rem;margin-left:var(--gap);display:flex;min-width:var(--side);padding-right:var(--gap)}.site-name{padding-bottom:.3rem;overflow:auto;font-size:3.4rem;font-weight:700;white-space:nowrap}.btn-dark{width:3rem;margin-left:2rem;cursor:pointer;background:url(./theme.png)0/auto 3rem no-repeat;transition:background-position .4s steps(5)}.dark .btn-dark{background-position:100%}.menu{display:flex;overflow:auto}.menu a{width:3rem}.menu a+a{margin-left:var(--gap)}.menu a.active{opacity:.44}.social{display:flex;margin-left:auto}.social a{width:1rem;height:1rem;padding:2rem;border:.35rem solid #0000;background:var(--url)center center no-repeat}.social a.active{border:.35rem solid #000;border-radius:50%}.social a+a{margin-left:var(--gap)}.dark .social a{filter:invert(1)}@media(max-width:1199px){.logo{min-width:auto}[data-menu=true]{--header:16rem}[data-menu=true] .header{position:relative}[data-menu=true] .header>*{height:calc(var(--header)/2)}[data-menu=true] .menu{position:absolute;inset:auto 0 0;border-bottom:1px solid var(--fog)}}.main{max-width:var(--narrow);min-height:calc(100% - var(--header) - var(--footer));padding-top:var(--y-gap);padding-bottom:var(--y-gap)}.main-title{margin-bottom:calc(var(--y-gap) + 1rem);font-size:3rem;font-weight:400;color:var(--lit)}.main-nav{display:flex;margin-top:5rem}.main-nav a{font-size:1.8rem;line-height:5.5rem;color:var(--white);background:var(--black);border-radius:.5rem;padding-inline:3rem}.main-nav .next{margin-left:auto}.post-entry{position:relative;padding-block:2rem;transition:transform .1s}.post-entry:first-of-type{margin-top:-2rem}.post-entry:active{transform:scale(.99)}.post-entry h2{margin-bottom:.2rem;font-size:3rem}.post-entry time{flex-shrink:0;font-size:1.7rem;color:var(--air)}.post-entry a{position:absolute;inset:0}.post-title{margin-bottom:calc(var(--y-gap) + 1rem)}.post-title p{display:flex;margin-bottom:1.5rem;font-size:1.6rem;color:var(--air);transform:translateY(.4rem)}.post-title p span::before{content:'·';margin-inline:.8rem}.post-title h1{font-size:5rem;transform:translateX(-.3rem)}.post-tags{margin-top:7rem}.post-tags a{display:inline-block;font-weight:500;line-height:5rem;color:var(--lit);background:rgba(var(--dark),.05);border-radius:.5rem;padding-inline:2rem}.post-tags a+a{margin-left:.5rem}.post-nav{display:flex;justify-content:space-between;margin-top:var(--y-gap);background:rgba(var(--dark),.05);border-radius:.5rem}.post-nav a{display:flex;align-items:center;width:50%;padding:var(--gap);font-size:2.4rem;font-weight:700;line-height:1.2}.post-nav a span+span{margin-left:1rem}.post-nav .prev{padding-right:1rem}.post-nav .next{justify-content:flex-end;padding-left:1rem;margin-left:auto}.post-comments{margin-top:var(--y-gap)}@media(max-width:1199px){.post-title{display:block}.post-title aside{flex-direction:row;width:auto;padding-right:0;margin-bottom:.5rem;margin-left:0;transform:none}.post-title aside span::before{content:'·';margin-inline:.5rem}}.post-content{font-size:2.2rem}.post-content h1,.post-content h2,.post-content h3,.post-content h4,.post-content h5,.post-content h6{margin-block:2rem}.post-content h1{margin-top:var(--y-gap);font-size:4.5rem}.post-content h2{margin-top:6rem;font-size:3.5rem}.post-content h3{font-size:2.5rem}.post-content h4{font-size:2.2rem}.post-content h5{font-size:1.8rem}.post-content h6{font-size:1.5rem}.post-content img{margin-inline:auto}.post-content a{padding-bottom:.2rem;font-weight:500;border-bottom:2px solid var(--pro)}.post-content a code{margin-inline:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.post-content del{text-decoration:none;background:linear-gradient(to right,var(--pro) 100%,transparent 0)0/1px 1px repeat-x}.post-content p,.post-content ul,.post-content ol,.post-content dl,.post-content details{margin-bottom:3rem}.post-content ul,.post-content ol{padding-left:2.5rem}.post-content li{margin-top:.6rem}.post-content li p{margin-bottom:0}.post-content dl{display:flex;flex-wrap:wrap;margin:0}.post-content dt{width:25%;font-weight:500}.post-content dd{width:75%;padding-left:1.3rem;margin-left:0}.post-content dt~dt,.post-content dd~dd{margin-top:1.3rem}.post-content table{margin-bottom:4rem}.post-content table th,.post-content table:not(.highlighttable) td{min-width:10rem;padding:1.5rem 1rem;line-height:1.5;border-bottom:1px solid var(--fog)}.post-content table th{font-size:1.6rem;text-align:left}.post-content table:not(.highlighttable) td code:only-of-type{margin-inline:0}.post-content .highlight,.post-content pre{margin:0 calc(var(--gap) * -1)4rem;overflow-x:auto;background:var(--hljs-bg)!important;border-radius:.5rem}.post-content ul pre{margin-left:calc(var(--gap) * -2)}.post-content .highlight pre{margin-inline:0;margin-bottom:0}.post-content .highlighttable{table-layout:fixed}.post-content .highlighttable td:first-of-type{width:5rem}.post-content .highlighttable td .linenodiv{padding-right:0!important}.post-content .highlighttable td .linenodiv pre,.post-content .highlighttable td .highlight{margin-bottom:0}.post-content .highlighttable td .highlight pre code::-webkit-scrollbar{display:none}.post-content .highlight span{background:0 0!important}.post-content code{padding:.5rem 1rem;margin-inline:.5rem;font-family:Menlo,Monaco,courier new,Courier,monospace;font-size:.8em;line-height:1.5;background:rgba(var(--dark),.06);border-radius:.3rem}.post-content pre code{display:block;padding:var(--gap);margin-inline:0;color:rgba(255,255,255,.8);background:0 0;border-radius:0}.post-content blockquote{padding:0 0 0 calc(var(--gap) - .4rem);margin:0 0 0 calc(var(--gap) * -1);border-left:.4rem solid var(--pro)}.post-content hr{height:1px;background:var(--fog);border:0;margin-block:12rem}.post-content iframe{width:100%;background:var(--black)}.footer{display:flex;align-items:center;justify-content:center;max-width:var(--narrow);height:var(--footer);padding-bottom:var(--safe-bottom);margin-top:auto;font-size:1.6rem;color:var(--lit);border-top:1px solid var(--fog)}.footer p+p::before{content:'·';margin-inline:.6rem}.footer a:hover{color:var(--pro);border-bottom:1px solid var(--pro)}.title-404{display:flex;align-items:center;justify-content:center;height:100%;padding-bottom:8rem;font-size:16rem}.header{margin-bottom:5rem}body .lava{z-index:1;--lava-background:var(--black);display:grid;position:relative;min-height:15rem;border-radius:1rem;width:100%;overflow:hidden}.lavasource{width:100%;height:5rem;background:var(--black)}body .lava .bubbles{position:absolute;top:11rem;left:0;right:0;height:1rem;background:var(--lava-background);filter:url(#blob)}body .lava .bubbles .bubble{position:absolute;left:var(--position,50%);background:var(--lava-background);border-radius:100%;-webkit-animation:bubble-size var(--time,4s)ease-in infinite var(--delay,0s),bubble-move var(--time,4s)ease-in infinite var(--delay,0s);animation:bubble-size var(--time,4s)ease-in infinite var(--delay,0s),bubble-move var(--time,4s)ease-in infinite var(--delay,0s);transform:translate(-50%,100%)}.header{font-family:LeagueGothic;text-transform:uppercase;letter-spacing:1rem}@-webkit-keyframes bubble-size{0%,75%{width:var(--size,4rem);height:var(--size,4rem)}100%{width:0;height:0}}@keyframes bubble-size{0%,75%{width:var(--size,4rem);height:var(--size,4rem)}100%{width:0;height:0}}@-webkit-keyframes bubble-move{0%{bottom:-4rem}100%{bottom:var(--distance,10rem)}}@keyframes bubble-move{0%{bottom:-4rem}100%{bottom:var(--distance,10rem)}}@font-face{font-family:LeagueGothic;src:url(LeagueGothic.ttf)} \ No newline at end of file diff --git a/art/index.html b/art/index.html index a31c8f0c..b649ae64 100644 --- a/art/index.html +++ b/art/index.html @@ -1,134 +1,6 @@ -Art - lavafrothlavafroth -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

All the art I make is licensed under Creative Commons +Art - lavafroth

All the art I make is licensed under Creative Commons Attribution-ShareAlike 4.0 International license unless specified otherwise. Please read the legal code before redistributing, adapting diff --git a/art/somebody-that-i-used-to-know/index.html b/art/somebody-that-i-used-to-know/index.html index 85b8a071..ee231708 100644 --- a/art/somebody-that-i-used-to-know/index.html +++ b/art/somebody-that-i-used-to-know/index.html @@ -1,132 +1,4 @@ -Somebody That I Used To Know - lavafrothlavafroth -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Apr 17, 2022

Somebody That I Used To Know

Reminds you of some song by +Somebody That I Used To Know - lavafroth

Apr 17, 2022

Somebody That I Used To Know

Reminds you of some song by Gotye? You’re right on track.

\ No newline at end of file diff --git a/art/tyler-joseph-portrait/index.html b/art/tyler-joseph-portrait/index.html index c068b035..cdc95f97 100644 --- a/art/tyler-joseph-portrait/index.html +++ b/art/tyler-joseph-portrait/index.html @@ -1,133 +1,5 @@ -Truce - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Jul 23, 2022

Truce

A painting of the lead vocalist of Twenty Øne Piløts. I named the piece +Truce - lavafroth

Jul 23, 2022

Truce

A painting of the lead vocalist of Twenty Øne Piløts. I named the piece after one of my favorite songs from their album Vessel. Check out the timelapse video available over at Odysee.

\ No newline at end of file diff --git a/categories/index.html b/categories/index.html index 9026f120..c5568f3c 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,131 +1,3 @@ -Categories - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file +Categories - lavafroth
\ No newline at end of file diff --git a/index.html b/index.html index ad0e827b..4ab097a9 100644 --- a/index.html +++ b/index.html @@ -1,134 +1,6 @@ -lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Java Code Analysis!?! - Web Challenge | PicoCTF 2023

+lavafroth

Java Code Analysis!?! - Web Challenge | PicoCTF 2023

Java Script Kiddie 2 - Web Challenge | PicoCTF 2019

Some Assembly Required 3 - Web Challenge | PicoCTF 2021

Kringlecon 2022 Writeup

@@ -138,4 +10,4 @@

Google CTF 2022 Treebox

RingZer0 CTF I Saw a Little Elf

RingZer0 CTF Hash Me Reloaded

-
\ No newline at end of file +
\ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html index b13393ab..7ad161e5 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -1,134 +1,6 @@ -lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RingZer0 CTF Hash Me Please

+lavafroth

RingZer0 CTF Hash Me Please

Oh my God, they killed Kenny!

RingZer0 CTF Bash Jail 3

RingZer0 CTF Bash Jail 2

@@ -138,4 +10,4 @@

Liberating 14GiB of disk space

PicoCTF web challenge: Notepad

Gadgeting in Python Jails

-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/a-reasonably-private-firefox-setup/index.html b/post/a-reasonably-private-firefox-setup/index.html index 557890df..1c038588 100644 --- a/post/a-reasonably-private-firefox-setup/index.html +++ b/post/a-reasonably-private-firefox-setup/index.html @@ -1,140 +1,12 @@ A Reasonably Private Firefox Setup - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

A Reasonably Private Firefox Setup

Privacy, something we expect as a default, is dwindling at an unimaginable rate +Basic Preferences Let’s make the easiest first step, for each of the following preferences, either head to the specified category under the about:preferences page or click the headings themselves.">

A Reasonably Private Firefox Setup

Privacy, something we expect as a default, is dwindling at an unimaginable rate when it comes to browsers. From amidst the sea of mostly chromium based browsers like Google Chrome, Opera and Edge, I’d pick Firefox despite the handful of questionable decisions made in the past by the parent company, Mozilla. Here’s how I prefer hardening my Firefox setup.

Basic Preferences

Let’s make the easiest first step, for each of the following preferences, either head to the specified category under the about:preferences page or click the headings themselves.

Home Preferences

  • Set Homepage and new windows to about:profiles. I’ll talk more on this later.
  • Set New tabs to Blank Page.
  • Uncheck everything under the Firefox Home Content.

Search Preferences

  • Set the Default Search Engine to DuckDuckGo. If you prefer using something like SearX, Qwant or StartPage, feel free to use those but please, no Google, Bing or Yahoo.
  • Uncheck everything under Search Suggestions.

Privacy Preferences

  • Set Enhanced Tracking Protection to Strict.
  • Scroll down and check the Delete cookies and site data when Firefox is closed. This does mean that you’ll have to log into your accounts every browser session. I’d rather sacrifice this slight convenience for better privacy.
  • Uncheck Ask to save logins and passwords for websites and Show alerts about passwords for breached websites under Login and Passwords.

History settings

  • Select the option from the dropdown that says Firefox will Use custom settings for history.
  • Uncheck Always use private browsing mode if checked.
  • Uncheck Remember browsing and download history and Remember serach and form history.
  • Check Clear history when Firefox closes.

Address Bar Settings

  • Uncheck Browsing history from the suggestion list.

Permission Settings

Under this section, go to each entry’s settings page and check Block new requests. You may not want to block certain permissions according to your workflow. However, I like my browser to be a tool to view pages on the internet and not an over-permissioned mess spying on me. Set Autoplay to Block Audio and Video because rickrolls are more annoying than funny nowadays.

Data Collection Settings

  • Uncheck everything under Firefox Data Collection and Use.
  • Uncheck Block dangerous and deceptive content.

Now, this might sound counterintuitive but it gets clear if you click the Learn more link. Here’s an excerpt from the article.

Firefox will submit some information about the file, including the name, origin, size and a cryptographic hash of the contents, to the Google Safe Browsing service which helps Firefox determine whether or not the file should be blocked.

I’d not touch a privacy invasive company like Google with a 40 feet long pole.

Under the HTTPS-Only Mode choose Enable HTTPS-Only Mode in all windows.

I prefer a minimal use of extensions. Speaking of extensions, a good first step is to disable the Pocket extension.

Additional Preferences

Head to about:config and accept the warning because we know what we’re doing. Search for extensions.pocket.enabled and set it to false.

Here’s a list of config keys and respective values we need to set them to:

Disable Telemetry

  • browser.ping-centre: false
  • toolkit.telemetry.enabled: false
  • toolkit.telemetry.server: (Clear the URL)
  • browser.tabs.crashReporting.sendReporting: false
  • identity.fxaccouts.enabled: false

Disable Location

  • geo.enabled: false

Disable queries to Google Safebrowsing

  • browser.safebrowsing.malware.enabled: false

Disable DNS prefetch

  • network.dns.disablePrefetch: true
  • network.dns.disablePrefetchFromHTTPS: true
  • network.dns.prefetch-next: true

Disable notifications

  • dom.webnotification.enabled: false

Block battery queries

  • dom.battery.enabled: false.

Disable referring website notifications

  • network.http.sendRefererHeader: false

Disable PDF scripting exploits

  • pdfjs.enableScripting: false

Disable WebGL

This might break some things like WebVNC and online games. Assuming you’re privacy oriented, it’s better off not using WebGL.

  • webgl.disabled: true

Extensions

There’s only one extension I use, UBlock Origin. It’s a fantastic ad-blocker out of the box and its functionality can be extended to block a plethora of APIs and elements on a site. If you wish to be a UBO power-user, read more here.

Utilizing Profiles

Let’s come back to why we set Homepage and new windows to about:profiles earlier. If we restart Firefox now, we’ll be greeted with About Profiles. Here, we can create and use multiple profiles. These profiles, even when running simultaneously, are isolated from each other.

Assume you have a personal GitHub account but also manage an organization account. You want to sign into both of these accounts at the same time. On your home page, start by choosing Create a New Profile > Next > set a profile name (say, personal) > Next. Now you can click Launch profile in new browser to have a slice completely isolated from your default browser profile.

Alternatives To Extensions

Here are some sites that make up for the aforementioned lack of extensions:

  • https://12ft.io removes paywall from news articles.
  • https://piped.video (or any other piped instance) provides a means to watch YouTube videos without sacrificing your privacy.

Some people use Bitwarden’s browser extension for password management. I prefer using old school KeePassXC on my host with the password database protected with a strong password.

With that, I’ll conclude this browser hardening post. Although this is in no way exhaustive in terms of hardening techniques, I hope you have learnt something new and remember, if your threat model asks for it, the Tor Browser -on Tails or Whonix might be your best bet. Bye!

-
\ No newline at end of file +on Tails or Whonix might be your best bet. Bye!

\ No newline at end of file diff --git a/post/gadgeting-in-python-jails/index.html b/post/gadgeting-in-python-jails/index.html index 6bfa5a06..440bc310 100644 --- a/post/gadgeting-in-python-jails/index.html +++ b/post/gadgeting-in-python-jails/index.html @@ -1,135 +1,7 @@ Gadgeting in Python Jails - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Gadgeting in Python Jails

We’ve all been there. That one CTF that wants to test your object oriented skills by confining you to a python jail. +Here is a cool video explanation by @pwnfunction on server side template injection wherein he mentions a way to “gadget” our way out of Flask’s Jinja2 backend to get remote code execution. Kudos to him for sharing this technique.">

Gadgeting in Python Jails

We’ve all been there. That one CTF that wants to test your object oriented skills by confining you to a python jail. Additionally some might even keep builtins and eval out of reach.

Here is a cool video explanation by @pwnfunction on server side template injection wherein he mentions a way to “gadget” our way out of Flask’s Jinja2 backend to get remote code execution. Kudos to him for sharing this technique.

For those of you reluctant to watch a 10 minute video (although I’d highly recommend watching it), here’s the gist of it:

''.__class__
@@ -233,4 +105,4 @@ of them, thereby executing the system commands.

.modules['os']
 .popen('id').read()
 

There you have it! This payload will work as long as there is at least one subclass in the subclasses list -which makes use of sys. With that, our object oriented quest has come to an end.

Thanks for giving this a read!

\ No newline at end of file +which makes use of sys. With that, our object oriented quest has come to an end.

Thanks for giving this a read!

\ No newline at end of file diff --git a/post/google-ctf-2022-treebox/index.html b/post/google-ctf-2022-treebox/index.html index 2b8bd00e..8aaf13f5 100644 --- a/post/google-ctf-2022-treebox/index.html +++ b/post/google-ctf-2022-treebox/index.html @@ -1,134 +1,6 @@ -Google CTF 2022 Treebox - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Google CTF 2022 Treebox

This challenge asks for python code as an input, converts it into an AST (abstract syntax tree) and if there aren’t any function calls or imports, executes the code. Our goal here is to avoid explicitly calling any functions yet reading the flag located at flag. We also can’t import any modules explicitly. If we read the source code provided for the challenge, we can observe that the sys module is already imported. We can piggyback on this fact to use its modules.

We shall, however, first find all the modules in sys.modules that have a get_data like function in their __loader__ attribute. To do so, we run the following locally:

import sys
+Google CTF 2022 Treebox - lavafroth

Google CTF 2022 Treebox

This challenge asks for python code as an input, converts it into an AST (abstract syntax tree) and if there aren’t any function calls or imports, executes the code. Our goal here is to avoid explicitly calling any functions yet reading the flag located at flag. We also can’t import any modules explicitly. If we read the source code provided for the challenge, we can observe that the sys module is already imported. We can piggyback on this fact to use its modules.

We shall, however, first find all the modules in sys.modules that have a get_data like function in their __loader__ attribute. To do so, we run the following locally:

import sys
 
 for name, handle in sys.modules.items():
     if loader := getattr(handle, '__loader__'):
@@ -161,5 +33,5 @@
 
 # Raise the exception
 raise Read
-
-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/index.html b/post/index.html index c6d052e0..a83fc662 100644 --- a/post/index.html +++ b/post/index.html @@ -1,134 +1,6 @@ -Posts - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Java Code Analysis!?! - Web Challenge | PicoCTF 2023

+Posts - lavafroth

Java Code Analysis!?! - Web Challenge | PicoCTF 2023

Java Script Kiddie 2 - Web Challenge | PicoCTF 2019

Some Assembly Required 3 - Web Challenge | PicoCTF 2021

Kringlecon 2022 Writeup

@@ -138,4 +10,4 @@

Google CTF 2022 Treebox

RingZer0 CTF I Saw a Little Elf

RingZer0 CTF Hash Me Reloaded

-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/kringlecon-2022-writeup/index.html b/post/kringlecon-2022-writeup/index.html index 6c60a99a..dc140ef2 100644 --- a/post/kringlecon-2022-writeup/index.html +++ b/post/kringlecon-2022-writeup/index.html @@ -1,136 +1,8 @@ Kringlecon 2022 Writeup - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Kringlecon 2022 Writeup

This writeup is rather haphazard as I jumped around from one place to another +git clone git@haugfactory.com:asnowball/aws_scripts.git We can clone this the HTTPS way:">

Kringlecon 2022 Writeup

This writeup is rather haphazard as I jumped around from one place to another solving different unrelated challenges. Although the writeup covers all the challenges, it definitely is not sequential. Just wanted to point that out before diving in.

Clone with a Difference

This challenge wants us to clone a git repository. It’s using git with ssh for @@ -752,5 +624,5 @@ silver ring.

Now the payload becomes the following:

}

goldring-morethansupertopsecret76394734.png

We paste the name of this file goldring-morethansupertopsecret76394734.png in our objective and that finishes this challenge. Moral: don’t underestimate NPC -dialogues.

-
\ No newline at end of file +dialogues.

\ No newline at end of file diff --git a/post/liberating-14gib-of-space/index.html b/post/liberating-14gib-of-space/index.html index cd38aabd..122523e1 100644 --- a/post/liberating-14gib-of-space/index.html +++ b/post/liberating-14gib-of-space/index.html @@ -1,137 +1,9 @@ Liberating 14GiB of disk space - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Liberating 14GiB of disk space

The idea is simple:

  • Remove all duplicates, including zero length files
  • Fine tuning: Hand-pick and remove files deemed unnecessary

Since the mileage for second step might vary from person to person, I’ll elaborate on the first step.

I chose jdupes as my weapon of choice for finding and removing the duplicates. +For a given folder we would run the following to wipe the duplicates:">

Liberating 14GiB of disk space

The idea is simple:

  • Remove all duplicates, including zero length files
  • Fine tuning: Hand-pick and remove files deemed unnecessary

Since the mileage for second step might vary from person to person, I’ll elaborate on the first step.

I chose jdupes as my weapon of choice for finding and removing the duplicates. It’s free and open-source and is cross platform.

For a given folder we would run the following to wipe the duplicates:

jdupes -rdNz .
 

Let me explain the flags:

FlagExplanation
rFind duplicates recursively
dDelete duplicates
NNo-prompt: when used with the d flag, it keeps the first file and removes all the others in a collection of duplicates
zConsider zero length files to be duplicates

The . here means the current directory.

Please read the tool’s help page for more granular control during the cleanup.

The computer in question runs Microsoft Windows and there’s a thing common in almost all Windows setups, drives.

This was a glaring issue. There could be files that are unique in a given drive but are actually duplicates @@ -145,5 +17,5 @@ traverse the hardlinks and find duplicates in the inter-drive space.

Next,

Finally we remove the hardlinks:

rm A:\Edrive
 

Note: Do not run jdupes at SYSTEMROOT (C: drive for most people) as there are legitimate duplicates which, if deleted, can brick a system. I’d recommend -running jdupes in individual directories like Music, Documents, etc.

-
\ No newline at end of file +running jdupes in individual directories like Music, Documents, etc.

\ No newline at end of file diff --git a/post/oh-my-god-they-killed-kenny/index.html b/post/oh-my-god-they-killed-kenny/index.html index cfacebb6..ca176aa7 100644 --- a/post/oh-my-god-they-killed-kenny/index.html +++ b/post/oh-my-god-they-killed-kenny/index.html @@ -1,134 +1,6 @@ -Oh my God, they killed Kenny! - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Oh my God, they killed Kenny!

Introduction

Despite being infamous for its profanity and dark, satiric humor, I’ve been a huge fan of South Park over the years. Now, before you walk away saying, “Screw you guys, I’m going home”, I’d like you to try out a random episode of South Park. While you certainly can visit the official website to watch a random episode, today’s post will explain a tiny bash script to watch one without launching the browser.

Prerequisites:

  • A POSIX compliant shell
  • mpv
  • youtube-dl or yt-dlp
  • jq
  • busybox utilities like curl and grep

Gone scripting

South Park’s official website has a route called random-episode which redirects us to, well, a random episode. +Oh my God, they killed Kenny! - lavafroth

Oh my God, they killed Kenny!

Introduction

Despite being infamous for its profanity and dark, satiric humor, I’ve been a huge fan of South Park over the years. Now, before you walk away saying, “Screw you guys, I’m going home”, I’d like you to try out a random episode of South Park. While you certainly can visit the official website to watch a random episode, today’s post will explain a tiny bash script to watch one without launching the browser.

Prerequisites:

  • A POSIX compliant shell
  • mpv
  • youtube-dl or yt-dlp
  • jq
  • busybox utilities like curl and grep

Gone scripting

South Park’s official website has a route called random-episode which redirects us to, well, a random episode. The catch, however, is that the redirection is done using javascript instead of regular HTTP status codes like 302. This meant, one couldn’t simply run the following and expect to see a video.

mpv https://southparkstudios.com/random-episode
 

Let’s try being a little creative to see what the page returns.

curl -L https://southparkstudios.com/random-episode
@@ -198,5 +70,5 @@ the beginning and the end of the JSON structure. We will also use the -ogrep -Po '{"type.+}' | \
 jq -r .children[0].children[0].props.items.items[0].path \
 )
-
-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/page/2/index.html b/post/page/2/index.html index 0663d26a..84457cad 100644 --- a/post/page/2/index.html +++ b/post/page/2/index.html @@ -1,134 +1,6 @@ -Posts - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RingZer0 CTF Hash Me Please

+Posts - lavafroth

RingZer0 CTF Hash Me Please

Oh my God, they killed Kenny!

RingZer0 CTF Bash Jail 3

RingZer0 CTF Bash Jail 2

@@ -138,4 +10,4 @@

Liberating 14GiB of disk space

PicoCTF web challenge: Notepad

Gadgeting in Python Jails

-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/picoctf-cryptography-pixelated/index.html b/post/picoctf-cryptography-pixelated/index.html index c0d859cf..549d3070 100644 --- a/post/picoctf-cryptography-pixelated/index.html +++ b/post/picoctf-cryptography-pixelated/index.html @@ -1,135 +1,7 @@ Pixelated - Cryptography challenge | PicoCTF 2021 - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Pixelated - Cryptography challenge | PicoCTF 2021

Hey folks! It’s been quite a while since I’ve made any CTF related posts. +Introduction This challenge gives use two images and asks us if we can make a flag out of them. At first glance, both the images look like noise. Upon a quick web lookup of visual cryptography, it appears that these separate images, known as shares of the original image, can be overlayed on each other to reconstruct the original image.">

Pixelated - Cryptography challenge | PicoCTF 2021

Hey folks! It’s been quite a while since I’ve made any CTF related posts. Hope this post and the subsequent ones will help me regain some momentum.

Introduction

This challenge gives use two images and asks us if we can make a flag out of them. At first glance, both the images look like noise. Upon a quick web lookup of visual cryptography, it appears @@ -191,5 +63,5 @@ in variables a and b.

}
 

After saving this file, we place the images in the current directory. Let’s compile and run the program.

cargo run
-

Viewing “flag.png” shows us the flag in pixelated text.

flag.png

-
\ No newline at end of file +

Viewing “flag.png” shows us the flag in pixelated text.

flag.png

\ No newline at end of file diff --git a/post/picoctf-forensics-operation-oni-operation-orchid/index.html b/post/picoctf-forensics-operation-oni-operation-orchid/index.html index 61218855..f14f3720 100644 --- a/post/picoctf-forensics-operation-oni-operation-orchid/index.html +++ b/post/picoctf-forensics-operation-oni-operation-orchid/index.html @@ -1,136 +1,8 @@ Operation Oni, Operation Orchid - Forensics Challenges | PicoCTF 2022 - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Operation Oni, Operation Orchid - Forensics Challenges | PicoCTF 2022

In this post, we’ll walk through the Operation Oni and Operation Orchid challenges +ssh -i key_file -p 61948 ctf-player@saturn.">

Operation Oni, Operation Orchid - Forensics Challenges | PicoCTF 2022

In this post, we’ll walk through the Operation Oni and Operation Orchid challenges from the PicoCTF competition held in March 2022. Both of these challenges involve the use of tools from The Sleuth Kit suite. In order to follow along, I’d recommend installing the suite of tools.

Operation Oni

The challenge has an associated instance which we’ll need to log into using SSH using @@ -290,5 +162,5 @@ Using -iter or -pbkdf2 would be better. bad decrypt 140377178797312:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:610: picoCTF{h4un71ng_p457_17237fce} -

There we have it, we’ve captured the flag.

-
\ No newline at end of file +

There we have it, we’ve captured the flag.

\ No newline at end of file diff --git a/post/picoctf-web-challenge-jauth/index.html b/post/picoctf-web-challenge-jauth/index.html index 80caf5b8..485a43c9 100644 --- a/post/picoctf-web-challenge-jauth/index.html +++ b/post/picoctf-web-challenge-jauth/index.html @@ -1,136 +1,8 @@ PicoCTF web challenge: JAuth - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

PicoCTF web challenge: JAuth

The challenge description states that most web application developers use third party components without testing their security. +The challenge is a dummy bank portal. On login, we see the message:">

PicoCTF web challenge: JAuth

The challenge description states that most web application developers use third party components without testing their security. It mentions some past affected companies, then asks us to identify and exploit the vulnerable component for the challenge at http://saturn.picoctf.net:52025/

The goal is to become an admin. We are provied with the username test and the password Test123! to look around.

The challenge is a dummy bank portal. On login, we see the message:

Hello, You have logged in the testing page. There is nothing to see here.

While logging in, if we check the network requests and responses, we can see a cookie named token being set.

Set-Cookie: token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoIjoxNjQ1NTE4MjkzMTE5LCJhZ2VudCI6Ik1vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NDsgcnY6OTcuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC85Ny4wIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2NDU1MTgyOTN9.dy45xnUb62Xnhqgo51JmGWRthAUGS-3jKwQ_RlDYCrw; path=/; httponly
@@ -204,5 +76,5 @@ The trailing dot following the encoded payload must be present.

So, I wrot fmt.Printf("Forged token: %v\n", strings.Join(parts, ".")) }

Now we run:

go run main.go eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoIjoxNjQ1NTE4MjkzMTE5LCJhZ2VudCI6Ik1vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NDsgcnY6OTcuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC85Ny4wIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2NDU1MTgyOTN9.dy45xnUb62Xnhqgo51JmGWRthAUGS-3jKwQ_RlDYCrw
-

which gives forged token: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJhZ2VudCI6Ik1vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NDsgcnY6OTcuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC85Ny4wIiwiYXV0aCI6MTY0NTUxODI5MzExOSwiaWF0IjoxNjQ1NTE4MjkzLCJyb2xlIjoiYWRtaW4ifQ.

Manually setting the cookie to this value, we are redirected to the admin page.

Hello, admin! You have logged in as admin!

and we are greeted with the flag picoCTF{succ3ss_@u7h3nt1c@710n_57072644}

-
\ No newline at end of file +

which gives forged token: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJhZ2VudCI6Ik1vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NDsgcnY6OTcuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC85Ny4wIiwiYXV0aCI6MTY0NTUxODI5MzExOSwiaWF0IjoxNjQ1NTE4MjkzLCJyb2xlIjoiYWRtaW4ifQ.

Manually setting the cookie to this value, we are redirected to the admin page.

Hello, admin! You have logged in as admin!

and we are greeted with the flag picoCTF{succ3ss_@u7h3nt1c@710n_57072644}

\ No newline at end of file diff --git a/post/picoctf-web-challenge-notepad/index.html b/post/picoctf-web-challenge-notepad/index.html index 7aa8c86b..4c91906e 100644 --- a/post/picoctf-web-challenge-notepad/index.html +++ b/post/picoctf-web-challenge-notepad/index.html @@ -1,137 +1,9 @@ PicoCTF web challenge: Notepad - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

PicoCTF web challenge: Notepad

At first glance the webapp looks like a stripped down version of Pastebin where we can post a text / code snippet. +. ├── app.py ├── Dockerfile ├── flag.txt ├── static └── templates ├── errors │ ├── bad_content.">

PicoCTF web challenge: Notepad

At first glance the webapp looks like a stripped down version of Pastebin where we can post a text / code snippet. After submitting the query, we are redirected to an html page containing the content of the post.

The first thing I tried was triggering XSS (cross site scripting) with the following:

<script>alert(1)</script>
 

The application source directory tree looks like the following:

.
 ├── app.py
@@ -183,5 +55,5 @@ flag-c8f5526c-4122-4578-96de-d7dd27193798.txt
 static
 templates
 

Let’s view the flag file. We’ll set c to cat%20flag-c8f5526c-4122-4578-96de-d7dd27193798.txt

There’s our flag!

picoCTF{styl1ng_susp1c10usly_s1m1l4r_t0_p4steb1n}
-
-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/picoctf-web-java-code-analysis/index.html b/post/picoctf-web-java-code-analysis/index.html index b4b600cb..e1c7c18b 100644 --- a/post/picoctf-web-java-code-analysis/index.html +++ b/post/picoctf-web-java-code-analysis/index.html @@ -1,137 +1,9 @@ Java Code Analysis!?! - Web Challenge | PicoCTF 2023 - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Java Code Analysis!?! - Web Challenge | PicoCTF 2023

To get started we are given the username “user” and password “user” to log into the BookShelf Pico web application. +@Service class SecretGenerator { private Logger logger = LoggerFactory.getLogger(SecretGenerator.class); private static final String SERVER_SECRET_FILENAME = "server_secret.">

Java Code Analysis!?! - Web Challenge | PicoCTF 2023

To get started we are given the username “user” and password “user” to log into the BookShelf Pico web application. We are also given the source code of the application.

Taking a look at the src/main/java/io/github/nandandesai/pico/security subdirectory of the project, we see that it uses JWT.

Interestingly, the file SecretGenerator.java in the aforementioned directory contains a weak hardcoded “random” value 😱.

@Service
 class SecretGenerator {
     private Logger logger = LoggerFactory.getLogger(SecretGenerator.class);
@@ -215,4 +87,4 @@ We are also given the source code of the application.

Taking a look at the payload["userId"] = Value::Number(2.into());

Rerun the program with

cargo run
 

and set the token-payload and auth-token in our browser to the new payload and encoded token from the program’s output respectively.

Now we can go to the main page and click on the flag book. There, we get the following flag.

picoCTF{w34k_jwt_n0t_g00d_6e5d7df5}
-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/picoctf-web-java-script-kiddie-2/index.html b/post/picoctf-web-java-script-kiddie-2/index.html index dd008e12..9d4760aa 100644 --- a/post/picoctf-web-java-script-kiddie-2/index.html +++ b/post/picoctf-web-java-script-kiddie-2/index.html @@ -1,136 +1,8 @@ Java Script Kiddie 2 - Web Challenge | PicoCTF 2019 - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Java Script Kiddie 2 - Web Challenge | PicoCTF 2019

This is a web challenge involving javascript, meaning most of the solution is +

Java Script Kiddie 2 - Web Challenge | PicoCTF 2019

This is a web challenge involving javascript, meaning most of the solution is going to be client side. We are asked to visit the challenge page.

From here, we can view the source code of the page.

<html>
 	<head>    
@@ -192,5 +64,5 @@ variable bytes.

The inner loop then fills up 16 contiguous bytes of the result array from the index j * LEN by a table lookup into the bytes array initialized earlier.

for(var j = 0; j < (bytes.length / LEN); j ++) {
 	result[(j * LEN) + i] = bytes[(((j + shifter) * LEN) % bytes.length) + i]
 }
-
-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/picoctf-web-some-assembly-required-3/index.html b/post/picoctf-web-some-assembly-required-3/index.html index e1c0cb08..b1ab8090 100644 --- a/post/picoctf-web-some-assembly-required-3/index.html +++ b/post/picoctf-web-some-assembly-required-3/index.html @@ -1,137 +1,9 @@ Some Assembly Required 3 - Web Challenge | PicoCTF 2021 - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Some Assembly Required 3 - Web Challenge | PicoCTF 2021

This is a web exploitation challenge from 2021. It’s pretty old but + While examining the javascript, we will notice that it is obfuscated and packed.">

Some Assembly Required 3 - Web Challenge | PicoCTF 2021

This is a web exploitation challenge from 2021. It’s pretty old but has less solves as of writing this post. I figured, it’s worth talking about.

We are told to visit http://mercury.picoctf.net:60022/index.html @@ -387,5 +259,5 @@ cargo add hex }

Now we run the program.

cargo run
 
picoCTF{b70fcd378740f6e4bce8388c01540c43}
-

There we have our flag!

-
\ No newline at end of file +

There we have our flag!

\ No newline at end of file diff --git a/post/r0-hash-me-please/index.html b/post/r0-hash-me-please/index.html index 8c84bfd8..7a597e4f 100644 --- a/post/r0-hash-me-please/index.html +++ b/post/r0-hash-me-please/index.html @@ -1,136 +1,8 @@ RingZer0 CTF Hash Me Please - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RingZer0 CTF Hash Me Please

In this RingZer0 challenge, we are asked to visit +const uri = "http://challenges.ringzer0team.com:10013/" We fetch the challenge page using the Get function from the http standard library, checking for errors along the way.">

RingZer0 CTF Hash Me Please

In this RingZer0 challenge, we are asked to visit http://challenges.ringzer0team.com:10013/ and are given 2 seconds to hash the provided message using the SHA512 algorithm. We must send the response as http://challenges.ringzer0team.com:10013/?r=response @@ -215,5 +87,5 @@ it only prints the flag when run.


Let’s parse the response body flag := doc.FindMatcher(goquery.Single(".alert-info")).Text() fmt.Println(flag) } -

-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/r0-hash-me-reloaded/index.html b/post/r0-hash-me-reloaded/index.html index af4b82a5..6a30768d 100644 --- a/post/r0-hash-me-reloaded/index.html +++ b/post/r0-hash-me-reloaded/index.html @@ -1,136 +1,8 @@ RingZer0 CTF Hash Me Reloaded - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RingZer0 CTF Hash Me Reloaded

In this RingZer0 challenge, we are to visit the challenge url where we are +const uri = "http://challenges.ringzer0team.com:10014/" We fetch the challenge page and defer closing its body once the program ends.">

RingZer0 CTF Hash Me Reloaded

In this RingZer0 challenge, we are to visit the challenge url where we are given 2 seconds to SHA512 hash the message represented by the binary provided string. We must send the response with the request parameter r. Let’s write a go program to do that.

First let’s declare the url as a constant.

const uri = "http://challenges.ringzer0team.com:10014/"
@@ -228,5 +100,5 @@ that it only prints the flag when run.


Let’s parse the response body flag := doc.FindMatcher(goquery.Single(".alert-info")).Text() fmt.Println(flag) } -

-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/r0-i-saw-a-little-elf/index.html b/post/r0-i-saw-a-little-elf/index.html index 354ffe3e..3874ca86 100644 --- a/post/r0-i-saw-a-little-elf/index.html +++ b/post/r0-i-saw-a-little-elf/index.html @@ -1,134 +1,6 @@ -RingZer0 CTF I Saw a Little Elf - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RingZer0 CTF I Saw a Little Elf

package main
+RingZer0 CTF I Saw a Little Elf - lavafroth

RingZer0 CTF I Saw a Little Elf

package main
 
 import (
 	"bytes"
@@ -228,5 +100,5 @@
 	// Print the text in the "alert-info" div, which is the flag.
 	fmt.Println(doc.FindMatcher(goquery.Single(".alert-info")).Text())
 }
-
-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/ringzer0ctf-bash-jail1/index.html b/post/ringzer0ctf-bash-jail1/index.html index dca0bb5c..adfad034 100644 --- a/post/ringzer0ctf-bash-jail1/index.html +++ b/post/ringzer0ctf-bash-jail1/index.html @@ -1,137 +1,9 @@ RingZer0 CTF Bash Jail 1 - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RingZer0 CTF Bash Jail 1

The challenge

Upon SSHing into the box, we are told that the flag is located at /home/level1/flag.txt

Challenge bash code:

while :
+I tried a dummy command to see if I could see its stderr since command substitution (backticks) only capture the stdout.">

RingZer0 CTF Bash Jail 1

The challenge

Upon SSHing into the box, we are told that the flag is located at /home/level1/flag.txt

Challenge bash code:

while :
 do
         echo "Your input:"
         read input
@@ -145,5 +17,5 @@ the stderr. So, I resorted to another route.

Solution

to bring it to effect? Well, we can also, source the flag.txt file and the script should error out with the contents of the file.

source flag.txt
 flag.txt: line 1: FLAG-U96l4k6m72a051GgE5EN0rA85499172K: command not found
-

There we have our flag.

-
\ No newline at end of file +

There we have our flag.

\ No newline at end of file diff --git a/post/ringzer0ctf-bash-jail2/index.html b/post/ringzer0ctf-bash-jail2/index.html index 5e9f07fe..13d21587 100644 --- a/post/ringzer0ctf-bash-jail2/index.html +++ b/post/ringzer0ctf-bash-jail2/index.html @@ -1,135 +1,7 @@ RingZer0 CTF Bash Jail 2 - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RingZer0 CTF Bash Jail 2

The challenge

Logging into the box we are told that the flag is located at /home/level2/flag.txt

Challenge bash code:

function check_space {
+Challenge bash code: function check_space { if [[ $1 == *[bdks';''&'' ']* ]] then return 0 fi return 1 } while : do echo "Your input:" read input if check_space "$input" then echo -e '\033[0;31mRestricted characters has been used\033[0m' else output="echo Your command is: $input" eval $output fi done Inference: This time, the check_space function returns a 1 if there are any characters in the input string among b,d,k,s, a semicolon, an ampersand and a whitespace.">

RingZer0 CTF Bash Jail 2

The challenge

Logging into the box we are told that the flag is located at /home/level2/flag.txt

Challenge bash code:

function check_space {
         if [[ $1 == *[bdks';''&'' ']* ]]
         then 
          return 0
@@ -157,5 +29,5 @@ We can use a simple command like cat flag.txt in backticks (command
 it in the eval statement. However, whitespaces are not allowed. To bypass this, we can use a
 tab in place of the whitespace.

Solution:

We give the script the following input:

`cat	flag.txt`
 

Which gets evaluated and prints the flag.

Your command is: FLAG-a78i8TFD60z3825292rJ9JK12gIyVI5P
-
-
\ No newline at end of file +
\ No newline at end of file diff --git a/post/ringzer0ctf-bash-jail3/index.html b/post/ringzer0ctf-bash-jail3/index.html index 3eefd393..43bfda0d 100644 --- a/post/ringzer0ctf-bash-jail3/index.html +++ b/post/ringzer0ctf-bash-jail3/index.html @@ -1,135 +1,7 @@ RingZer0 CTF Bash Jail 3 - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

RingZer0 CTF Bash Jail 3

The challenge

Logging into the box we are told that the flag is located at /home/level3/flag.txt.

function check_space {                                                                      
+function check_space { if [[ $1 == *[bdksc]* ]] then return 0 fi return 1 } while : do echo "Your input:" read input if check_space "$input" then echo -e '\033[0;31mRestricted characters has been used\033[0m' else output=`$input` &>/dev/null echo "Command executed" fi done We are also told that this prompt is launched using ./prompt.sh 2>/dev/null which means we cannot exfiltrate the flag from stderr since it is blocked.">

RingZer0 CTF Bash Jail 3

The challenge

Logging into the box we are told that the flag is located at /home/level3/flag.txt.

function check_space {                                                                      
         if [[ $1 == *[bdksc]* ]]                                                            
         then                                                                                
                 return 0                                                                    
@@ -159,5 +31,5 @@ substitution with the stdout and stderr being redirect
 we can resort to redirecting the output to stdin (file descriptor 0).

Solution

We can pass a command that reads and displays the contents of flag.txt in an eval statement and redirect the output to stdin. However, we need a command that does not have the restricted characters. One such command would be tail which, by default, reads the last 10 lines of a file.

eval tail flag.txt >&0 # Redirect to stdin
-

This gives us the flag FLAG-s9wXyc9WKx1X6N9G68fCR0M78sx09D3j.

-
\ No newline at end of file +

This gives us the flag FLAG-s9wXyc9WKx1X6N9G68fCR0M78sx09D3j.

\ No newline at end of file diff --git a/post/the-make-everything-ok-button/index.html b/post/the-make-everything-ok-button/index.html index 8b863d2c..c9cb128e 100644 --- a/post/the-make-everything-ok-button/index.html +++ b/post/the-make-everything-ok-button/index.html @@ -1,134 +1,6 @@ -The Make Everything Ok Button - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The Make Everything Ok Button

Disclaimer

Before I begin, I must warn you that DeepFaceLab is just a tool and it is neither good nor +The Make Everything Ok Button - lavafroth

The Make Everything Ok Button

Disclaimer

Before I begin, I must warn you that DeepFaceLab is just a tool and it is neither good nor bad. If you use the tool independently or in conjuction with my Docker image, make sure it is for personal education only. Neither the tool nor the image is meant to be used for making illicit or obscene imagery. If you dare to go beyond the words in this disclaimer, you and @@ -158,5 +30,5 @@ Clone my repository and run the docker compose commands:

docker-compose run app

Place the data_src and data_dst videos in the workspace directory and inside the container, run the scripts in the scripts directory.

Although this is far from the definitive version of the “Make everything OK” button, I hope that -this image somewhat reduces the overhead of setting up DeepFaceLab, making it quicker to get real work done.

Happy faking!

-
\ No newline at end of file +this image somewhat reduces the overhead of setting up DeepFaceLab, making it quicker to get real work done.

Happy faking!

\ No newline at end of file diff --git a/tags/index.html b/tags/index.html index 1af5cf49..3c1a19e6 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1,131 +1,3 @@ -Tags - lavafrothlavafroth -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file +Tags - lavafroth
\ No newline at end of file