Nullcon 2025
I participated in Nullcon 2025, as a core member of the team InfoSecIITR. Our team secured 9th place globally. Here are the Writeups of some challenges I was personally able to solve during the competition.
Misc
Ancient Paper
Challenge Description
We are given an image file along the following description: “I found this ancient artifact stuck in an old machine labeled “29”. But what is its purpose?”
Solution
Initial inspection leads to the conclusion that the image is of an IBM-29 punch card which was carrying our flag as its data.
Decoding the flag
Then I used the following mapping of the IBM-29 punch card to decode the data.


Which lead to the following text:
1 | 1337 FORMAT ENO H0LL3R1TH 3NC0D3D F0RTR4N PRINT 1337 |
And hence we get our flag as:
Flag:
1 | ENO{H0LL3R1TH_3NC0D3D_F0RTR4N} |
Driving
Challenge Description
We are given a strange video (.mp4) of a “banana driving a Car xD”.
Solution
On extracting the frames of the video using the frames per second rates of 30 fps we get 387 frames.
1 | ffmpeg -i driving.mp4 -vf "fps=30" frame_%04d.png |
Also the Artist in the video’s metadata looks like a hint for the challenge.
1 | $ exiftool driving.mp4 |
Now on a simple inspection of the frames, one thing that catches our eye is the presence of } in the frame number 383 (indexing from 1).

Then by the Artist hint on inspecting frames on intervals of 10 i.e the following frames,[103,113,123,133,143,153,163,173,183,193,203,213,223,233,243,253,263,273,283,293,303,313,323,333,343,353,363,373,383]
we find that each of those frames contain one character of the flag in the following order Left Top → Right Top → Right Bottom → Left Bottom → Left Top…, which leads us to our flag.
Flag:
1 | ENO{Y0U_4R3_DR1V1N6_M3_CR4ZY} |
Powerplay
Challenge Description
An interactive challenge where we are given the python code for the challenge and our job is to trick the server to reveal the flag.
Solution
On initial inspection of the code, we can find the vulnerability in it,
1 | import numpy as np |
The code creates the power as a numpy array of 32 bit signed integer type and then, the pump option lets us square the power array and the check is just if the power value is less than the length of quotes (positive) so one can cause integer overflow in power value to make it negative on squaring but there is one more catch that as the prizes has [flag]*24 we need to specifically make power in the range (-23 to -1) so that we bypass the check and access the prizes array at an index where the flag is present which is one out of the last 24 cells, so we write a brute force script to get such a number.
1 | import numpy as np |
This gives first valid solution as 34716455 1 -15, and on using this as our input we get our flag.
1 | Welcome to our playground for powerful people where you can pump yourself up and get awesome prizes! |
Flag:
1 | ENO{d0_n0t_be_s0_neg4t1ve_wh3n_y0u_sh0uld_be_pos1t1ve} |
Profound thought
Challenge Description
We are given a .png file, and this happened to be the easiest challenge of the CTF.
Solution
A simple LSB steganography challenge, just use zsteg on the file and we get our flag.
1 | $ zsteg l5b245c11.png |
Flag:
1 | ENO{57394n09r4phy_15_w4y_c00l3r_7h4n_p0rn06r4phy} |
USBnet
Challenge Description
We are given a packet capture of USB packtes.
Solution
On initial analysis of the .pcapng in Wireshark we observe that packet 170 contains the PNG magic bytes of a .png image and it also has the IEND chunk meaning the complete image was transferred in this packet so we just try to reconstruct the image from this packet using Cyberchef which gives the QR of our flag.


Flag:
1 | ENO{USB_ETHERNET_ADAPTER_ARE_COOL_N!C3} |
abroad study notes
Challenge Description
We are given a corrupted jpeg image which looks like its data streams are scratched.
Solution
Now from the JPEG documentation we find,
“If a 0xff byte occurs in the compressed image data either a zero byte (0x00) or a marker identifier follows it. Normally the only marker that should be found once the image data is started is an EOI. When a 0xff byte is found followed by a zero byte (0x00) the zero byte must be discarded.”
So on inspecting the given jpeg we find it has ff 07 markers causing the distortion so we just fix them to ff 00 and our jpeg restores to original one.

Documentation to refer: jpeg-format-layout
Flag:
1 | ENO{o7_t0_4ll_r3pl4c3d_07} |



