all repos — site @ b8f2b94bcde6d115eb621c958199ebd8c399981a

source for my site, found at icyphox.sh

pages: switch to cdn.icyphox.sh

Evaluating BunnyCDN.
Anirudh Oppiliappan x@icyphox.sh
Fri, 29 Apr 2022 11:22:57 +0530
commit

b8f2b94bcde6d115eb621c958199ebd8c399981a

parent

5a1f0e94fda6f8ad2eaafc53077c5044e0e9da60

M bin/replace.gobin/replace.go

@@ -18,7 +18,7 @@ fmt.Println("usage: replace [old string] [new string]")

os.Exit(1) } - oldLine, newLine := os.Args[1], os.Args[2] + oldStr, newStr := os.Args[1], os.Args[2] posts, err := os.ReadDir(dir) if err != nil {

@@ -33,8 +33,9 @@ }

lines := strings.Split(string(input), "\n") for i, line := range lines { - if strings.Contains(line, oldLine) { - lines[i] = newLine + if strings.Contains(line, oldStr) { + line = strings.ReplaceAll(line, oldStr, newStr) + lines[i] = line } } output := strings.Join(lines, "\n")
M pages/about.mdpages/about.md

@@ -41,7 +41,7 @@

I'm generally uninterested in social media and don't often post on any. If you're interested in **hiring me** -- here's my -[résumé](https://x.icyphox.sh/resume.pdf). +[résumé](https://cdn.icyphox.sh/resume.pdf). ## this site
M pages/blog/2019-09-27.mdpages/blog/2019-09-27.md

@@ -38,7 +38,7 @@ was getting my Minecraft launcher to run. The JRE isn't fully ported to `musl`

yet.[^1] The solution to that is fairly trivial and I plan to write about it soon. (hint: it involves chroots) -![](https://x.icyphox.sh/LDq8W.png) +![](https://cdn.icyphox.sh/LDq8W.png) ## Packaging for Alpine
M pages/blog/2020-in-review.mdpages/blog/2020-in-review.md

@@ -56,7 +56,7 @@

- [radicale](https://radicale.org): Cal/CardDAV server - [Pleroma](https://pleroma.social): Single-user federated social media instance -- [filehost](https://x.icyphox.sh) +- [filehost](https://cdn.icyphox.sh) - [gonic](https://github.com/sentriz/gonic): Music streaming server - [crxn](http://deavmi.assigned.network/docs/crxn/site/): Cool network of cool people.
M pages/blog/2021-05-10.mdpages/blog/2021-05-10.md

@@ -28,7 +28,7 @@ below), some infosec work and the usual SRE stuff. I'll probably write

about the observability infrastructure in detail sometime -- perhaps on the company blog. -![deepsource observability infra](https://x.icyphox.sh/vgPL9.png) +![deepsource observability infra](https://cdn.icyphox.sh/vgPL9.png) I even managed to break prod within the first month! But in all seriousness, it's pretty riveting work, with some very fun people.
M pages/blog/2021-in-review.mdpages/blog/2021-in-review.md

@@ -41,8 +41,8 @@ cloud-native security, and some more Kubernetes.

Oh, and here are a few pictures from our trip to the Maldives.[^1] -![maldives 1](https://x.icyphox.sh/FX~bI.jpg) -![maldives 2](https://x.icyphox.sh/DMHDG.jpg) +![maldives 1](https://cdn.icyphox.sh/FX~bI.jpg) +![maldives 2](https://cdn.icyphox.sh/DMHDG.jpg) [^1]: If you're in Bangalore and are looking for work, definitely consider [applying to DeepSource](https://careers.deepsource.io)!
M pages/blog/building-forlater.mdpages/blog/building-forlater.md

@@ -23,7 +23,7 @@ service that works via email. Email is the perfect tool for this

use-case: works offline; you can organize it however you like; you own your data. -![forlater arch](https://x.icyphox.sh/JNAn4.png) +![forlater arch](https://cdn.icyphox.sh/JNAn4.png) Pictured above is how forlater works. Each component is explained below.
M pages/blog/bujo.mdpages/blog/bujo.md

@@ -88,7 +88,7 @@

I can't go without posting what it actually looks like in my notebook; so here, have a FOIA-declassified-looking picture of my bullet journal. -![bullet journal](https://x.icyphox.sh/QzrdK.jpeg) +![bullet journal](https://cdn.icyphox.sh/QzrdK.jpeg) This was when I first attempted the weekly log. Evidently, I struggled to compute dates accurately. And yes, "rice acme" was a task -- one

@@ -99,7 +99,7 @@ the book with a pencil and I plan to continue with it until I finsh this

notebook -- there's still about half of it left. I plan to cop a dotgrid notebook for my next one, and start using a pen. -![notebook with sticker](https://x.icyphox.sh/0psb8.jpeg) +![notebook with sticker](https://cdn.icyphox.sh/0psb8.jpeg) At first I was sceptical. I didn't think I'd stick to it. But hey, looks like I did. I've been using my bullet journal spinoff method to great
M pages/blog/covid19-disinfo.mdpages/blog/covid19-disinfo.md

@@ -82,7 +82,7 @@ registrations happening. Expect phishing and malware campaigns using the

virus as a theme. In the past 24 hrs, ~450 `.com` domains alone were registered. -![](https://x.icyphox.sh/SgswL.png) +![](https://cdn.icyphox.sh/SgswL.png) Anywho, there are bigger problems at hand -- like the fact that my uni still hasn't suspended classes!
M pages/blog/disinfo.mdpages/blog/disinfo.md

@@ -142,7 +142,7 @@ Of course, if you're a nobody on Twitter (like me), this is a non-issue for you.

And please, don't do this: -![](https://x.icyphox.sh/gqoHr.png) +![](https://cdn.icyphox.sh/gqoHr.png) ## Conclusion
M pages/blog/ducky-one-2.mdpages/blog/ducky-one-2.md

@@ -21,7 +21,7 @@ [Meckeys](https://meckeys.com). They aren't particularly abundant in

variety, but there's some decent prebuilts that you can pick up on there -- and I copped the Ducky One 2 SF. -![Ducky One 2 SF side view](https://x.icyphox.sh/5LSG7.jpg) +![Ducky One 2 SF side view](https://cdn.icyphox.sh/5LSG7.jpg) It's a 65% board, so unlike standard 60% boards, this comes with arrow keys and the `Del`, `PgUp` and `PgDn` keys. I don't _really_ need the

@@ -31,7 +31,7 @@ `~` keys are merged. I have to hit `Shift + Esc` for tilde (same action

as usual), and `Fn + Esc` for the backtick. Takes a bit of relearning, but it's manageable. -![Ducky One 2 SF top-down view](https://x.icyphox.sh/tRdNw.jpg) +![Ducky One 2 SF top-down view](https://cdn.icyphox.sh/tRdNw.jpg) The key switches I went with were the Cherry MX Speed Silvers -- like Reds but actuate a bit faster. As it's my first ever mechanical
M pages/blog/fb50.mdpages/blog/fb50.md

@@ -29,11 +29,11 @@ Android phones have the ability to capture Bluetooth (HCI) traffic

which can be enabled under Developer Options under Settings. We made around 4 "unlocks" from the Android phone, as seen in the screenshot. -![](https://x.icyphox.sh/IO5G0.png) +![](https://cdn.icyphox.sh/IO5G0.png) This is the value sent in the `Write` request: -![](https://x.icyphox.sh/rJVoE.png) +![](https://cdn.icyphox.sh/rJVoE.png) We attempted replaying these requests using `gattool` and `gattacker`, but that didn't pan out, since the value being written was encrypted.[^1]
M pages/blog/five-days-tty.mdpages/blog/five-days-tty.md

@@ -141,4 +141,4 @@ trying to debug my issues.

I'll now conclude with an obligatory screenshot. -![scrot](https://x.icyphox.sh/R6G.png) +![scrot](https://cdn.icyphox.sh/R6G.png)
M pages/blog/formula-e.mdpages/blog/formula-e.md

@@ -49,7 +49,7 @@ vote each recieve extra power during the race. Yup. You read that right.

They made a World Championship racing series a social media popularity contest. -![formula e broadcast](https://x.icyphox.sh/VOodw.png) +![formula e broadcast](https://cdn.icyphox.sh/VOodw.png) My last gripe is with the broadcast. It's so bad! They really should lose the gamer graphics. The driver list on the left is not color coded
M pages/blog/go-shell-prompt.mdpages/blog/go-shell-prompt.md

@@ -223,7 +223,7 @@ PS1='$(~/dotfiles/prompt/prompt) '

``` And here's what it looks like, rendered: -![go prompt](https://x.icyphox.sh/boh7u.png) +![go prompt](https://cdn.icyphox.sh/boh7u.png) ## benchmarking
M pages/blog/hacky-scripts.mdpages/blog/hacky-scripts.md

@@ -84,7 +84,7 @@ involves JSON parsing with [`jq`](https://stedolan.github.io/jq/).

That's it! It's so small, but I learnt a ton. For those curious, here's what it looks like running: -![](https://x.icyphox.sh/orGJ9.png) +![](https://cdn.icyphox.sh/orGJ9.png) ## Update latest post on the index page
M pages/blog/ig-opsec.mdpages/blog/ig-opsec.md

@@ -117,7 +117,7 @@ altogether (hint: Facebook), but that's a discussion for another day.

Or be like me: -![](https://x.icyphox.sh/fI7nL.jpg) +![](https://cdn.icyphox.sh/fI7nL.jpg) And that pretty much wraps it up, with a neat little bow.
M pages/blog/k8s-at-home.mdpages/blog/k8s-at-home.md

@@ -35,7 +35,7 @@

Since my RPi is behind a CG-NAT, I'm running a Wireguard mesh that looks something like this: -![wireguard mesh](https://x.icyphox.sh/1Xkvh.png) +![wireguard mesh](https://cdn.icyphox.sh/1Xkvh.png) Wireguard is fairly trivial to set up, and there are tons of guides online, so I'll skip that bit.

@@ -124,7 +124,7 @@ In essence, it makes one of your nodes attract all the traffic,

assigning each `LoadBalancer` service an IP from a configured address pool (not your node IP). In my case: -![jade loadbalancer](https://x.icyphox.sh/zuy96.png) +![jade loadbalancer](https://cdn.icyphox.sh/zuy96.png) However, this assumes that our load balancer node has a public IP. Well it does, but we're still within our Wireguard network. To actually
M pages/blog/mastodon-to-pleroma.mdpages/blog/mastodon-to-pleroma.md

@@ -66,7 +66,7 @@ ## why should you migrate?

Because Pleroma is cleaner, leaner[^3] and prettier looking[^4]. Oh, and we have chats. -![screenshot of pleroma + soapbox-fe](https://x.icyphox.sh/l8g5y.png) +![screenshot of pleroma + soapbox-fe](https://cdn.icyphox.sh/l8g5y.png) [^1]: [Erlang install guide](http://erlang.org/doc/installation_guide/INSTALL.html) [^2]: [Elixir install guide](https://elixir-lang.org/install.html#compiling-from-source-unix-and-mingw)
M pages/blog/mnml-browsing.mdpages/blog/mnml-browsing.md

@@ -63,4 +63,4 @@ further incentivised to dispose of my Google account.

And here's the screenshot y'all were waiting for: -![](https://x.icyphox.sh/d03i0.png) +![](https://cdn.icyphox.sh/d03i0.png)
M pages/blog/my-setup.mdpages/blog/my-setup.md

@@ -72,7 +72,7 @@ container. This is convenient for many reasons, keeps your global

namespace clean and a single command to drop into a Kali shell. I use a DigitalOcean droplet (BLR1) as a public filehost, found at -[x.icyphox.sh](https://x.icyphox.sh). The UI is the wonderful +[cdn.icyphox.sh](https://cdn.icyphox.sh). The UI is the wonderful [serve](https://github.com/zeit/serve), by [ZEIT](https://zeit.co). The same box also serves as my IRC bouncer and OpenVPN (TCP), which I tunnel via SSH running on 443. Campus firewall woes.
M pages/blog/nullcon-2020.mdpages/blog/nullcon-2020.md

@@ -97,4 +97,4 @@ Note to the Nullcon organizers: you guys did a fantastic job running the

conference despite Corona-chan's best efforts. I'd like to suggest one little thing though -- please VET YOUR SPEAKERS more! -![](https://x.icyphox.sh/EjO-E.jpg) +![](https://cdn.icyphox.sh/EjO-E.jpg)
M pages/blog/nvim-lua.mdpages/blog/nvim-lua.md

@@ -291,7 +291,7 @@

vim.o.statusline = table.concat(stl) ``` -![statusline](https://x.icyphox.sh/statusline.png) +![statusline](https://cdn.icyphox.sh/statusline.png) ## this is what being tpope feels like
M pages/blog/openbsd-hp-envy.mdpages/blog/openbsd-hp-envy.md

@@ -152,4 +152,4 @@ / -- --\

~icy ``` -![openbsd rice](https://x.icyphox.sh/zDYdj.png) +![openbsd rice](https://cdn.icyphox.sh/zDYdj.png)
M pages/blog/pi.mdpages/blog/pi.md

@@ -83,4 +83,4 @@

And oh, here's the protective case [nerd](https://peppe.rs) fashioned out of cardboard. -![](https://x.icyphox.sh/zn2I3.jpg) +![](https://cdn.icyphox.sh/zn2I3.jpg)
M pages/blog/prosody.mdpages/blog/prosody.md

@@ -136,7 +136,7 @@ user registrations from XMPP/Jabber clients (security risk!), by setting

`allow_registration = true`. I may have missed something important, so here's [my -config](https://x.icyphox.sh/prosody.cfg.lua) for reference. +config](https://cdn.icyphox.sh/prosody.cfg.lua) for reference. ## Closing notes
M pages/blog/pycon-wrap-up.mdpages/blog/pycon-wrap-up.md

@@ -63,10 +63,10 @@ It's not much, and

I can't be bothered to format them like a collage or whatever, so I'll just dump them here -- as is. -![](https://x.icyphox.sh/4oTZB.jpg) -![](https://x.icyphox.sh/EApua.jpg) -![](https://x.icyphox.sh/40hAp.jpg) -![](https://x.icyphox.sh/uCDR-.jpg) +![](https://cdn.icyphox.sh/4oTZB.jpg) +![](https://cdn.icyphox.sh/EApua.jpg) +![](https://cdn.icyphox.sh/40hAp.jpg) +![](https://cdn.icyphox.sh/uCDR-.jpg) ## C'est tout
M pages/blog/r2wars-2020.mdpages/blog/r2wars-2020.md

@@ -49,7 +49,7 @@

Ultimately, this bot placed 7th out of 9 contestants -- an underwhelming outcome. I had to fix this. -![day 1](https://x.icyphox.sh/gk1i0.png) +![day 1](https://cdn.icyphox.sh/gk1i0.png) ## day 2

@@ -99,7 +99,7 @@ These changes paid off, though. I placed 4th on day 2, out of 13

contestants! This screenshot was taken on my phone as I was eating dinner. -![day 2](https://x.icyphox.sh/5ZJfT.png) +![day 2](https://cdn.icyphox.sh/5ZJfT.png) All wasn't well though -- I still lost 4 matches, for the reasons below:

@@ -159,7 +159,7 @@ submissions (and some updated submissions), and a lot of them checked

`0x000` for existence of a bot, effectively recking me. I placed 8th out of 14 contestants, with 7 wins and 6 losses. Tough day. -![day 3](https://x.icyphox.sh/IKqxD.png) +![day 3](https://cdn.icyphox.sh/IKqxD.png) ## day 4: the finals

@@ -175,7 +175,7 @@ were all claimed by ARM, and naturally so -- they had a potential

throughput of 64 bytes per cycle thanks to `stmia`, compared to x86's 32 bytes. Pretty neat! -![day 4](https://x.icyphox.sh/DJbEE.png) +![day 4](https://cdn.icyphox.sh/DJbEE.png) ## links and references
M pages/blog/rop-on-arm.mdpages/blog/rop-on-arm.md

@@ -76,16 +76,16 @@ Start by running it, and entering any arbitrary string. On entering a fairly

large string, say, “A” × 20, we see a segmentation fault occur. -![](https://x.icyphox.sh/qrN69.png) +![](https://cdn.icyphox.sh/qrN69.png) Now, open it up in `gdb` and look at the functions inside it. -![](https://x.icyphox.sh/3j-MJ.png) +![](https://cdn.icyphox.sh/3j-MJ.png) There are three functions that are of importance here, `main`, `winner` and `gadget`. Disassembling the `main` function: -![](https://x.icyphox.sh/p2iFF.png) +![](https://cdn.icyphox.sh/p2iFF.png) We see a buffer of 16 bytes being created (`sub sp, sp, #16`), and some calls to `puts()`/`printf()` and `scanf()`. Looks like `winner` and `gadget` are

@@ -93,7 +93,7 @@ never actually called.

Disassembling the `gadget` function: -![](https://x.icyphox.sh/1T8XT.png) +![](https://cdn.icyphox.sh/1T8XT.png) This is fairly simple, the stack is being initialized by `push`ing `{r11}`, which is also the frame pointer (`fp`). What’s interesting is the `pop {r0, pc}`

@@ -107,7 +107,7 @@ in `pc`. Neat.

Moving on to the disassembly of the `winner` function: -![](https://x.icyphox.sh/BDtJr.png) +![](https://cdn.icyphox.sh/BDtJr.png) Here, we see a calls to `puts()`, `system()` and finally, `exit()`. So our end goal here is to, quite obviously, execute code via the `system()`

@@ -121,7 +121,7 @@

Back to `gdb`, hit `r` to run and pass in a patterned input, like in the screenshot. -![](https://x.icyphox.sh/7IDsI.png) +![](https://cdn.icyphox.sh/7IDsI.png) We hit a segfault because of invalid memory at address `0x46464646`. Notice the `pc` has been overwritten with our input.

@@ -139,7 +139,7 @@ ```shell

$ python -c 'print("AAAABBBBCCCCDDDDEEEE\x28\x05\x01\x00")' | ./rop2 ``` -![](https://x.icyphox.sh/A~RaT.png) +![](https://cdn.icyphox.sh/A~RaT.png) The reason we don’t jump to the first instruction is because we want to control the stack ourselves. If we allow `push {rll, lr}` (first instruction) to occur, the program will `pop`

@@ -182,7 +182,7 @@

``` (gdb) find &system, +9999999, "/bin/sh" ``` -![](https://x.icyphox.sh/SiNzl.png) +![](https://cdn.icyphox.sh/SiNzl.png) One hit at `0xb6f85588`. The addresses of `gadget` and `system()` can be found from the disassmblies from earlier. Here’s the final exploit code:

@@ -201,7 +201,7 @@ Honestly, not too far off from our pseudo-code :)

Let’s see it in action: -![](https://x.icyphox.sh/9ob4r.png) +![](https://cdn.icyphox.sh/9ob4r.png) Notice that it doesn’t work the first time, and this is because `/bin/sh` terminates when the pipe closes, since there’s no input coming in from STDIN.
M pages/blog/signal-vmm.mdpages/blog/signal-vmm.md

@@ -102,7 +102,7 @@

ssh -Y pantwo signal-desktop &> /dev/null ``` -![signal desktop](https://x.icyphox.sh/HwF45.png) +![signal desktop](https://cdn.icyphox.sh/HwF45.png) ## caveats
M pages/uses.mdpages/uses.md

@@ -14,7 +14,7 @@ **Asus ROG Flow X13 (2021)**: 13.4" 4K, Ryzen 9 5900HS, 32GB RAM, 1TB

SSD, Nvidia GTX 1650 Max-Q. Even more future proof than the Envy -- evidently. Runs Linux quite well; not sure about BSD. -![lotus58 keyboard](https://x.icyphox.sh/wsHGX.jpg) +![lotus58 keyboard](https://cdn.icyphox.sh/wsHGX.jpg) **Lotus58**: Split-ortho mechanical keyboard, Gazzew Boba LT switches. **Logitech M221**: An el cheapo wireless mouse that mouses just enough.