<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>quixel200</title><link>http://mycatpets.me/</link><description>Recent content on quixel200</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 24 Apr 2026 17:58:42 +0530</lastBuildDate><atom:link href="http://mycatpets.me/index.xml" rel="self" type="application/rss+xml"/><item><title>Now</title><link>http://mycatpets.me/now/</link><pubDate>Fri, 24 Apr 2026 17:58:42 +0530</pubDate><guid>http://mycatpets.me/now/</guid><description>&lt;h1 id="whats-this">Whats this?&lt;/h1>
&lt;p>For anyone wondering what this page is &lt;a href="https://nownownow.com/about">check this out&lt;/a>&lt;/p>
&lt;h1 id="learning">Learning!&lt;/h1>
&lt;p>Now that I think about it that one word summarizes my entire existence&amp;hellip;&lt;/p>
&lt;h1 id="ctfs">CTFs&lt;/h1>
&lt;p>I absolutely love &lt;a href="https://en.wikipedia.org/wiki/Capture_the_flag_%28cybersecurity%29">CTF&amp;rsquo;s&lt;/a>. Me and my team have won a lot of CTFs&amp;hellip; but more than that almost every CTF I have participated in has taught me something new, stuff that I never knew even existed. I truly believe that these challenge authors live in a different plane of existencee. You can probably guess how excited I was when I had the oppurtunity to be one as well.&lt;/p></description></item><item><title>A Slice Of Lemon Pie</title><link>http://mycatpets.me/writeups/l3m0nctf/a_slice_of_lemon_pie/</link><pubDate>Fri, 02 Jan 2026 10:39:59 +0530</pubDate><guid>http://mycatpets.me/writeups/l3m0nctf/a_slice_of_lemon_pie/</guid><description>&lt;p>Let&amp;rsquo;s run &lt;code>checksec&lt;/code> on the binary and see what protections it has.&lt;/p>
&lt;pre tabindex="0">&lt;code>quix@quixel:~$ checksec --file=format_pie
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Partial RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 48 Symbols No 0 2 format_pie
&lt;/code>&lt;/pre>&lt;ul>
&lt;li>PIE,NX and canary are all enabled.&lt;/li>
&lt;li>Partial RELRO means that we can overwrite a GOT entry.&lt;/li>
&lt;/ul>
&lt;p>We can also see that the binary contains a win function that spawns a shell for us:&lt;/p></description></item><item><title>Jailer</title><link>http://mycatpets.me/writeups/l3m0nctf/jailer/</link><pubDate>Fri, 02 Jan 2026 10:25:08 +0530</pubDate><guid>http://mycatpets.me/writeups/l3m0nctf/jailer/</guid><description>&lt;p>Let&amp;rsquo;s decompile the binary and see what it does&lt;/p>
&lt;pre tabindex="0">&lt;code> sub_1280(a1, a2, a3);
 if ( !(unsigned int)sub_13A0() )
 return system(a2[1]);
&lt;/code>&lt;/pre>&lt;p>It seems to expect a command line argument, if provided it calls &lt;code>sub_13A0()&lt;/code> to &amp;lsquo;check&amp;rsquo; the input and calls &lt;code>system&lt;/code> on our input.&lt;/p>
&lt;p>Now you can just run &lt;code>cat flag.txt&lt;/code> and it will print the flag locally. But let&amp;rsquo;s dig a bit deeper.&lt;/p>
&lt;pre tabindex="0">&lt;code>__int64 sub_13A0()
{
 int v0; // ebp
 int v1; // ebx
 v0 = sub_12E0();
 v1 = open(&amp;#34;flag.txt&amp;#34;, 0);
 if ( v1 &amp;lt; 0 )
 {
 v1 = open(&amp;#34;/flag.txt&amp;#34;, 0);
 if ( v1 &amp;lt; 0 )
 return 0xFFFFFFFFLL;
 }
 dup2(v1, v0);
 close(v1);
 return 0;
}
&lt;/code>&lt;/pre>&lt;p>This seems to open the flag, &lt;code>v0&lt;/code> is calculated in &lt;code>sub_12E0&lt;/code>. The file descriptor for the flag is in &lt;code>v1&lt;/code> which then gets closed after a &lt;code>dup2&lt;/code> call. dup2 is used to duplicate the file descriptor.&lt;/p></description></item><item><title>Virtual girlfriend</title><link>http://mycatpets.me/writeups/l3m0nctf/virtual_girlfriend/</link><pubDate>Fri, 02 Jan 2026 10:09:21 +0530</pubDate><guid>http://mycatpets.me/writeups/l3m0nctf/virtual_girlfriend/</guid><description>&lt;p>We have been given a &lt;code>main.s&lt;/code> file, written in AT&amp;amp;T syntax&amp;hellip; (or as I like to call it, the wrong syntax). Our goal is to find out the return value of the program.&lt;/p>
&lt;p>The main concept of this challenge is that it has some infinite loops and dead code that prevents you from executing it normally.&lt;/p>
&lt;pre tabindex="0">&lt;code> label1:
 push rbp
 mov rbp, rsp
 call label2
 call label3
 jmp label4
 pop rbp
 ret
...
 label4:
 jmp label4 
&lt;/code>&lt;/pre>&lt;ul>
&lt;li>After calling label2 and label3, there is a jmp label4&lt;/li>
&lt;li>label4 calls &lt;code>jmp label4&lt;/code>, creating an infinite loop.&lt;/li>
&lt;li>The solution is to remove lavel4 completely.&lt;/li>
&lt;/ul>
&lt;p>Inside label3,&lt;/p></description></item><item><title>Phantom Resolver</title><link>http://mycatpets.me/writeups/l3m0nctf/phantom_resolver/</link><pubDate>Fri, 02 Jan 2026 09:20:02 +0530</pubDate><guid>http://mycatpets.me/writeups/l3m0nctf/phantom_resolver/</guid><description>&lt;p>The challenge provides us with 2 binary files:&lt;/p>
&lt;ul>
&lt;li>server_daemon&lt;/li>
&lt;li>libmonitor.so&lt;/li>
&lt;/ul>
&lt;p>Looking at the server daemon decompilation:&lt;/p>
&lt;pre tabindex="0">&lt;code>int __fastcall main(int argc, const char **argv, const char **envp)
{
 const char **v3; // rbx

 print_banner(argc, argv, envp);
 printf(&amp;#34;\n[*] Starting daemon in &amp;#34;);
 if ( argc &amp;lt;= 1 )
 {
LABEL_7:
 puts(&amp;#34;INTERACTIVE mode&amp;#34;);
 puts(&amp;#34;[!] Warning: daemon mode not enabled&amp;#34;);
 puts(&amp;#34;[!] Use --daemon flag for production deployment&amp;#34;);
 }
 else
 {
 v3 = argv + 1;
 while ( strcmp(*v3, &amp;#34;--daemon&amp;#34;) )
 {
 if ( ++v3 == &amp;amp;argv[(unsigned int)(argc - 2) + 2] )
 goto LABEL_7;
 }
 puts(&amp;#34;DAEMON mode&amp;#34;);
 }
 putchar(10);
 initialize_subsystems();
 puts(&amp;#34;\n[*] Running system integrity check...&amp;#34;);
 system_check();
 puts(&amp;#34;\n[*] Daemon initialization complete&amp;#34;);
 return 0;
}
&lt;/code>&lt;/pre>&lt;p>We can see that it prints some lines and then calls &lt;code>system_check()&lt;/code>, looking at system check:&lt;/p></description></item><item><title>Registers</title><link>http://mycatpets.me/notes/reverse_engineering/assembly/registers/</link><pubDate>Tue, 28 Oct 2025 08:57:16 +0530</pubDate><guid>http://mycatpets.me/notes/reverse_engineering/assembly/registers/</guid><description>&lt;p>When running a program the CPU needs fast access to memory to perform operations efficiently. The time it takes for the CPU to fetch instructions from RAM is a very costly operation which is why we have registers.&lt;/p>
&lt;p>The x86 64 bit architecture contains 16 registers each holding 64 bits of data, similarly the older x86 32 bit architecture had 9 registers each holding 32 bits data.&lt;/p>
&lt;p>The 32 bit general purpose registers are:&lt;/p></description></item><item><title>Number Systems</title><link>http://mycatpets.me/notes/reverse_engineering/assembly/number_system/</link><pubDate>Tue, 28 Oct 2025 08:22:25 +0530</pubDate><guid>http://mycatpets.me/notes/reverse_engineering/assembly/number_system/</guid><description>&lt;p>Each base follows a pattern and you can clearly see that from the examples.&lt;/p>
&lt;h1 id="hexadecimal-base-16">Hexadecimal (Base 16)&lt;/h1>
&lt;p>Each digit can represent upto 16, 0-9 and then A-F(for 10 to 16).&lt;/p>
&lt;pre tabindex="0">&lt;code>0x2f is 48 in decimal

 2 f
(16^1)*2 + (16^0)*16(f = 16)
&lt;/code>&lt;/pre>&lt;h1 id="decimal-base-10">Decimal (Base 10)&lt;/h1>
&lt;p>The one we&amp;rsquo;re all familiar with, numbers 0-9. Pretty self explanatory.&lt;/p>
&lt;pre tabindex="0">&lt;code>25 

 2 5
(10^1)*2 + (10^0)*5
&lt;/code>&lt;/pre>&lt;h1 id="octal-base-8">Octal (Base 8)&lt;/h1>
&lt;p>Contains numbers 0-7, each digit representing 3 bits. If you&amp;rsquo;re familiar with Linux file permissions you already know Octal.&lt;/p></description></item><item><title>Pwntools</title><link>http://mycatpets.me/notes/binary_exploitation/pwntools/</link><pubDate>Sat, 25 Oct 2025 08:37:35 +0530</pubDate><guid>http://mycatpets.me/notes/binary_exploitation/pwntools/</guid><description>&lt;h1 id="pwntools-cheatsheet">pwntools cheatsheet&lt;/h1>
&lt;h1 id="program-interaction">Program Interaction&lt;/h1>
&lt;p>start a process&lt;/p>
&lt;pre tabindex="0">&lt;code>p = process(&amp;#34;binary&amp;#34;)
&lt;/code>&lt;/pre>&lt;p>to attach gdb (note: compatable terminal required, I prefer using tmux)&lt;/p>
&lt;pre tabindex="0">&lt;code>p = gdb.debug(&amp;#34;binary&amp;#34;)
p = gdb.debug(&amp;#34;binary&amp;#34;,alsr=False)
&lt;/code>&lt;/pre>&lt;p>To interact with a remote process&lt;/p>
&lt;pre tabindex="0">&lt;code>p = remote(ip,port)
&lt;/code>&lt;/pre>&lt;h2 id="writing-and-reading-data">Writing and reading data&lt;/h2>
&lt;pre tabindex="0">&lt;code>p.send(b&amp;#34;hello&amp;#34;) -&amp;gt; sends &amp;#34;hello&amp;#34;
p.sendline(b&amp;#34;hello&amp;#34;) -&amp;gt; sends &amp;#34;hello\n&amp;#34;

p.recv(100) -&amp;gt; read upto 100 bytes
p.recvline() -&amp;gt; read till a newline(\n) is encountered
p.recvall() -&amp;gt; readall
p.clean(1) -&amp;gt; readall with timeout

p.sendafter(b&amp;#34;some string&amp;#34;,payload) -&amp;gt; sends payload after the string is encountered 
p.sendlineafter(b&amp;#34;some string&amp;#34;,payload) -&amp;gt; same as sendafter but with newline at end


p.interactive() -&amp;gt; interact manually
&lt;/code>&lt;/pre>&lt;h2 id="setting-context">Setting context&lt;/h2>
&lt;p>important when writing assembly and doing ROP&lt;/p></description></item><item><title>Integrated Security</title><link>http://mycatpets.me/notes/intro_to_cybersecurity/integrated_security/</link><pubDate>Tue, 19 Aug 2025 08:51:29 +0530</pubDate><guid>http://mycatpets.me/notes/intro_to_cybersecurity/integrated_security/</guid><description>&lt;p>These challenges build upon everything you learned so far, you&amp;rsquo;re almost there!&lt;/p>
&lt;p>There will be very little or nothing new to learn here, you need to combine previously learned concepts.&lt;/p>
&lt;ul>
&lt;li>Some of these challenges took me close to a week to complete, you will eventually get it!&lt;/li>
&lt;/ul>
&lt;h2 id="some-tips-for-secure-chat">Some tips for secure chat&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Read the server code, it doesn&amp;rsquo;t change much from 1-5 and it will help you a lot. (When I say read I mean understand each and every line)&lt;/p></description></item><item><title>Binary Exploitation</title><link>http://mycatpets.me/notes/intro_to_cybersecurity/binary_exploitation/</link><pubDate>Tue, 19 Aug 2025 08:39:39 +0530</pubDate><guid>http://mycatpets.me/notes/intro_to_cybersecurity/binary_exploitation/</guid><description>&lt;p>When exploiting these challenges, I highly recommend using &lt;code>gdb&lt;/code> to save you some time.&lt;/p>
&lt;h2 id="in-pwntools">in pwntools&lt;/h2>
&lt;p>debugging will only work with with a multiplexer like &lt;code>tmux&lt;/code>(covered in the linux module)&lt;/p>
&lt;p>The difference between these is important&lt;/p>
&lt;p>Start a process with the debugger(&lt;strong>This will drop privileges&lt;/strong>)&lt;/p>
&lt;pre tabindex="0">&lt;code>p = gdb.debug(&amp;#34;process&amp;#34;)
&lt;/code>&lt;/pre>&lt;p>Start the process and then attach a debugger(&lt;strong>this will not work if its a setuid binary&lt;/strong>)&lt;/p>
&lt;pre tabindex="0">&lt;code>p = process(&amp;#34;process&amp;#34;)
gdb.attach(p)
&lt;/code>&lt;/pre>&lt;h2 id="debugging-shellcode">Debugging shellcode&lt;/h2>
&lt;p>If your shellcode doesn&amp;rsquo;t work for some reason, add an int3 instruction to the beginning of your shellcode (&lt;code>\xcc&lt;/code>). When run with a debugger it will automatically break at that point.&lt;/p></description></item><item><title>Reverse Engineering</title><link>http://mycatpets.me/notes/intro_to_cybersecurity/reverse_engineering/</link><pubDate>Tue, 19 Aug 2025 08:32:55 +0530</pubDate><guid>http://mycatpets.me/notes/intro_to_cybersecurity/reverse_engineering/</guid><description>&lt;p>Now would be a great time to learn to use &lt;code>ghidra&lt;/code>,&lt;code>ida&lt;/code>,&lt;code>radare2&lt;/code> or &lt;code>binary ninja&lt;/code>. Also python scripting will come in real handy.&lt;/p>
&lt;ul>
&lt;li>Do not waste your time trying to read the nested arrays or structs in the pseudo code section of ghidra(you&amp;rsquo;re welcome to try), it is much better to read the disassembly.&lt;/li>
&lt;li>some disassemblers might decompile things better than others, for example I have seen Ida automatically find main in stripped binaries unlike Ghidra.&lt;/li>
&lt;li>If static analysis gets too hard, just give the program input and see what goes wrong!, maybe even use something like gdb and set breakpoints.&lt;/li>
&lt;/ul>
&lt;p>There will be some challenges with a &lt;strong>massive spike in difficulty&lt;/strong>, don&amp;rsquo;t give up you&amp;rsquo;ll eventually get it.&lt;/p></description></item><item><title>Access Control</title><link>http://mycatpets.me/notes/intro_to_cybersecurity/access_control/</link><pubDate>Tue, 19 Aug 2025 08:30:43 +0530</pubDate><guid>http://mycatpets.me/notes/intro_to_cybersecurity/access_control/</guid><description>&lt;p>Do you really want a guide for this? :(&lt;/p>
&lt;p>You might want to script the last 2 levels using &lt;code>pwntools&lt;/code> (there&amp;rsquo;s a community dojo for that)&lt;/p></description></item><item><title>Cryptography</title><link>http://mycatpets.me/notes/intro_to_cybersecurity/cryptography/</link><pubDate>Mon, 18 Aug 2025 16:27:37 +0530</pubDate><guid>http://mycatpets.me/notes/intro_to_cybersecurity/cryptography/</guid><description>&lt;p>After scouring through the internet for many hours, I have come to the conclusion that the material provided on the module is sufficient.&lt;/p>
&lt;p>Here&amp;rsquo;s a video on how to approach the POA challenges that&amp;rsquo;s on the discord server:&lt;/p>
&lt;p>&lt;a href="https://discord.com/channels/750635557666816031/968683579649437696/1400392548832514149">here&lt;/a>&lt;/p></description></item><item><title>Intercepting_communication</title><link>http://mycatpets.me/notes/intro_to_cybersecurity/intercepting_communication/</link><pubDate>Mon, 18 Aug 2025 16:13:30 +0530</pubDate><guid>http://mycatpets.me/notes/intro_to_cybersecurity/intercepting_communication/</guid><description>&lt;h1 id="denial-of-service">Denial of Service&lt;/h1>
&lt;p>Be patient&amp;hellip; you need to find the right balance where you overwhelm the server but not your machine.&lt;/p>
&lt;ul>
&lt;li>Sometimes your flag might get lose in errors so either save the output to a log or grep it directly.&lt;/li>
&lt;/ul>
&lt;h1 id="the-rest-of-the-challenges">The rest of the challenges&lt;/h1>
&lt;p>After these challenges, you need to craft raw packets using &lt;code>scapy&lt;/code>. The documentation is linked in the module.
&lt;a href="https://portswigger.net/web-security/file-path-traversal">Check out portswigger&lt;/a>&lt;/p></description></item><item><title>Web Security</title><link>http://mycatpets.me/notes/intro_to_cybersecurity/web_security/</link><pubDate>Mon, 18 Aug 2025 16:00:25 +0530</pubDate><guid>http://mycatpets.me/notes/intro_to_cybersecurity/web_security/</guid><description>&lt;h1 id="path-traversal">Path Traversal&lt;/h1>
&lt;ul>
&lt;li>The description is more than enough to solve these. This might seem very simple but it &lt;a href="https://hackernoon.com/a-deep-dive-into-path-traversal-vulnerabilities">happens more often than you think&lt;/a>&lt;/li>
&lt;li>&lt;strong>curl hates relative paths&lt;/strong>, it will resolve paths automatically, read the man pages to know more.I would recommend using python for testing.&lt;/li>
&lt;/ul>
&lt;h1 id="command-injection">Command Injection&lt;/h1>
&lt;ul>
&lt;li>The only hint for level 6:
Think of &lt;em>every&lt;/em> character you can use. Think about how you run multiple commands in your terminal or in a bash script&lt;/li>
&lt;/ul>
&lt;h1 id="sql-injection">SQL injection&lt;/h1>
&lt;ul>
&lt;li>If you understand how SQL injection works, you&amp;rsquo;ll breeze through these, if not, watch the lecture video again&lt;/li>
&lt;/ul>
&lt;h1 id="xss">XSS&lt;/h1>
&lt;p>Before trying anything, cat the source code and understand what it&amp;rsquo;s doing.&lt;/p></description></item><item><title>SMS</title><link>http://mycatpets.me/projects/sms/</link><pubDate>Mon, 18 Aug 2025 15:11:33 +0530</pubDate><guid>http://mycatpets.me/projects/sms/</guid><description>&lt;h1 id="student-management-system-sms">Student Management System (SMS)&lt;/h1>
&lt;p>A full stack web app developed with HTML, Bootstrap, JavaScript, jQuery, PHP and MySQL designed to help faculty and students manage various academic and administrative activities.&lt;/p>
&lt;p>&lt;strong>Developed with the help of:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Karthiban R&lt;/strong> (our mentor and team lead)&lt;/li>
&lt;li>&lt;strong>Kavinnandha&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Archana&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Keren&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Liyander Rishwanth&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Harish Kumar&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>The application will be primarily used for automating log generation and the attendance of each class. It also has many features such as requesting and approving leaves, a front-end for database upload and editing, and dashboards for various roles.&lt;/p></description></item><item><title>The OSI Model</title><link>http://mycatpets.me/articles/osi-model/</link><pubDate>Mon, 18 Aug 2025 10:24:25 +0530</pubDate><guid>http://mycatpets.me/articles/osi-model/</guid><description>&lt;h1 id="osi-model">OSI Model&lt;/h1>
&lt;p>Note: You can view the packet capture in my github repository. This is meant to be supplementary material for my presentation, so don&amp;rsquo;t worry if it&amp;rsquo;s not clear. I will update it later with the full explanation.&lt;/p>
&lt;p>The Open Systems Interconnection (OSI) model is a &lt;strong>reference model&lt;/strong> developed by the International Organization for Standardization (ISO) that &amp;ldquo;provides a common basis for the coordination of standards development for the purpose of systems interconnection.&lt;/p></description></item></channel></rss>