<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Artur Serra</title>
    <description>The latest articles on DEV Community by Artur Serra (@arturserra).</description>
    <link>https://dev.to/arturserra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F320912%2Ffe3fc866-2e46-45c5-8ff5-a01fcfbfd31a.jpg</url>
      <title>DEV Community: Artur Serra</title>
      <link>https://dev.to/arturserra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arturserra"/>
    <language>en</language>
    <item>
      <title>Rustlings #1 (Or The Power of Comments in Programming)</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Sat, 18 Mar 2023 17:07:45 +0000</pubDate>
      <link>https://dev.to/arturserra/rustlings-1-or-the-power-of-comments-in-programming-4705</link>
      <guid>https://dev.to/arturserra/rustlings-1-or-the-power-of-comments-in-programming-4705</guid>
      <description>&lt;p&gt;The first &lt;a href="https://dev.tourl"&gt;Rustling&lt;/a&gt; challenge shows us how comments are an essential part of programming, bringing - in one way or another - numerous benefits to developers and teams. They serve as a form of documentation that makes it easier for developers to understand the code by providing context, clarity, and explanations of how the code works, helping developers to save time and effort by reducing the need to decipher code and allowing them to focus on the actual problem-solving.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Original post on - &lt;a href="https://www.therustyco.de/post/rustlings-1-or-the-power-of-comments-in-programming"&gt;https://www.therustyco.de/post/rustlings-1-or-the-power-of-comments-in-programming&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  I. Introduction
&lt;/h2&gt;

&lt;p&gt;Comments are an essential and often overlooked part of programming, especially in complex projects where there can be a lot of code to navigate. They serve as a form of documentation that makes it easier for developers to understand the code by providing context, clarity, and explanations of how the code works. This helps developers to save time and effort by reducing the need to decipher code and allowing them to focus on the actual problem solving. In addition, comments can also help to identify potential issues, highlight tricky code, and provide insights into why certain decisions were made during the development process.&lt;/p&gt;

&lt;p&gt;In this blog post, we will explore the importance of commenting code and the benefits that it can bring to developers in more detail. We will delve deeper into the different types of comments, such as single-line and multi-line comments, and provide examples of how they can be used effectively. We will also discuss self-documented code, which is code that is written in a way that is easy to read and understand, even without comments. By understanding the importance of self-documented code, you can write code that is not only functional but also easy to understand.&lt;/p&gt;

&lt;p&gt;Furthermore, we will cover the best practices for commenting code. By following these methods, you can ensure that your comments are consistent, easy to read and effective. Then, we’ll take a look on some examples of tricky code, and how commenting can be important to make code understandable in this scenario. &lt;/p&gt;

&lt;p&gt;By following these best practices, you can write code that is well-documented, easy to understand, and maintainable for years to come. With comments, you can ensure that your code is readable and maintainable by others (or the future you). This is especially important when working on a team, as it can lead to better collaboration and more efficient development. By the end of this post, you will have a deeper understanding of how comments can benefit your development process and how to write efficient  code with comments.&lt;/p&gt;

&lt;p&gt;In the first Rustling challenge, we face a simple task for most experienced programmers, but it may not be so simple for beginners: Remove a comment from the code. However, even more experienced programmers don’t fully understand all the implications and strategies to comment their code, which can be prejudicial for their collaborative work with their teammates.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;// intro1.rs&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// About this `I AM NOT DONE` thing:
// We sometimes encourage you to keep trying things on a given exercise, even
// after you already figured it out. If you got everything working and feel
// ready for the next exercise, remove the `I AM NOT DONE` comment below.
// Execute `rustlings hint intro1` or use the `hint` watch subcommand for a hint.
//
// If you're running this using `rustlings watch`: The exercise file will be reloaded
// when you change one of the lines below! Try adding a `println!` line, or try changing
// what it outputs in your terminal. Try removing a semicolon and see what happens!

// I AM NOT DONE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To complete this challenge, simply remove the whole line that states //I AM NOT DONE, and you should be good to go. Quite simple, right? More or less. Commenting code can be a bit more challenging than that, and that’’s what I will explain to you in this post!&lt;/p&gt;

&lt;h2&gt;
  
  
  II. Comment the Method
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why is it important?
&lt;/h3&gt;

&lt;p&gt;Documenting code is an essential part of programming, as it allows developers to understand the functionality and purpose of the code. However, simply commenting the code inside a method may not be enough to provide a complete understanding of the method's purpose and functionality. This is why it is important to also comment the method itself, providing context and a higher-level overview of its purpose within the codebase.&lt;/p&gt;

&lt;p&gt;By commenting both the method and the code inside it, developers can gain a profound understanding of its purpose and how it contributes to the overall functionality of the codebase. This information can help other developers understand how it fits into the larger codebase and how they can use it in their own code. In addition, a method comment can also provide information about any of its potential issues or limitations, which can be useful when debugging or modifying the code.&lt;/p&gt;

&lt;p&gt;Commenting just the code inside a method can be helpful for understanding how the code works, but it may not provide a complete understanding of the the purpose and functionality it provides. Without a method comment, other developers may have to spend more time deciphering what the method actually does, and less time fixing or improving it. By adding comments above and inside the method, developers can save time and effort by quickly understanding what the method does and how it contributes to the overall functionality of the code.&lt;/p&gt;

&lt;p&gt;But commenting can also help with code maintenance. If a developer needs to modify or update the codebase, they can use the method comments to quickly understand the purpose of the method and any potential implications of modifying it. This can help prevent unintended consequences and make the modification process more efficient, ensuring that the codebase remains maintainable and understandable, even as it is updated and modified over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best practices for commenting the method
&lt;/h3&gt;

&lt;p&gt;Good method comments use clear and concise language that describes the method's purpose and functionality. They should include information about the inputs and outputs of the method, as well as any potential issues or limitations. Method comments should also be consistent with the formatting and style used throughout the codebase. This can help to make the codebase more maintainable and easier to understand for other developers. Additionally, adding examples that demonstrate how to use the method can be very helpful, especially for developers who are new to the codebase.&lt;/p&gt;

&lt;p&gt;Bad method comments, on the other hand, are vague and may not provide enough information about the method's purpose and functionality. They may also use abbreviated or unclear names for the method, which can make it harder for other developers to understand what the method actually does. Comments that are too long or irrelevant can also be unhelpful, especially if they don't provide any useful information about the method's purpose or functionality.&lt;/p&gt;

&lt;p&gt;When commenting a method in Rust programming, it is important to use clear and concise language that describes the method's purpose and functionality. The following are examples of good and bad method comments:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// This is the main function. It will print a sentence in the console.
// The code should not take any arguments, it  will simply run the
// print in line - println! - macro. 
fn main() {
// Statements here are executed when the compiled binary is called.

    // Print text to the console.
    println!("Hello World!");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we have an example of the simplest code you could write in Rust, probably. A simple Hello World being printed to the console. But in this case, we added some documentation for other developers to understand what is actually going on in this method, and what we expect it to do. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// This prints text
fn main() {
    println!("Hello World")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this other method, the comment is too vague and does not provide enough information about the method's purpose and functionality. It prints something in the console? In an actual printer? In the screen? It also does not include any information about the inputs or outputs of the method, if it should take anything or what it should return. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/// Returns the average of a vector of integers.
///
/// # Arguments
///
/// * `numbers` - A vector of 32-bit integers.
///
/// # Examples
///
/// let numbers = vec![1, 2, 3, 4, 5];
/// let result = calculate_average(numbers);
/// assert_eq!(result, 3);
fn calculate_average(numbers: Vec&amp;lt;i32&amp;gt;) -&amp;gt; i32 {
    let sum = numbers.iter().sum::&amp;lt;i32&amp;gt;();
    let count = numbers.len() as i32;
    let average = sum / count;

    return average;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this other case, we have a detailed set of instructions, explaining in details the functionality of this method. It also adds what arguments should be passed, what should be expected to be returned, and even some usage examples. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/// Calculates the average of a vector.
fn avg(numbers: Vec&amp;lt;i32&amp;gt;) -&amp;gt; i32 {
    let sum = numbers.iter().sum::&amp;lt;i32&amp;gt;();
    let count = numbers.len() as i32;
    let avg = sum / count;

    return avg;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this method, everything looks like a mess! Abbreviation (which is even worse in the next subject, Self-Documenting Code), a vague description and no clue at all of what is being passed and what we should expect  to see being returned.&lt;/p&gt;

&lt;h2&gt;
  
  
  III. Self-Documenting Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is self-documenting code?
&lt;/h3&gt;

&lt;p&gt;We’ve been talking a lot about displaying the functionalities of the code in the comments, right? The self-documenting code is a concept that refers to writing code in a way that conveys its purpose and functionality without the need for additional comments. This is achieved by using descriptive variable and function names, breaking up complex code into smaller, more manageable pieces, and using consistent formatting and indentation. When code is self-documenting, it becomes easier for other developers to read and understand, reducing the need for comments and making the codebase more maintainable.&lt;/p&gt;

&lt;p&gt;Writing self-documenting code has many advantages that can make developer’s lives easier. For one, it makes the code effortless to read and understand. When code is written with descriptive names for variables and functions, it becomes the process to understand what each part of the code does is straightforward and painless. This can lead to faster development times since developers can more quickly and easily get the gist of the codebase. Additionally, self-documenting code can reduce the need for comments. Comments can be helpful, but they can also become outdated or misleading if the code they describe is changed. Let’s say you update a method for something else, but forget to update its comments. This way, the next developer who touches the codebase will find a piece of “lying” code that can slow down their process. With self-documenting code, the code itself becomes the documentation, making it easier for other developers to understand and modify the code without the need for any additional comments. When code is self-documenting, developers can spend less time writing and updating comments and more time focusing on writing high-quality, maintainable code, which can lead to better and more efficient workflows. When code is written in a clear and concise way, it becomes easier for new developers to get up to speed and start contributing to the project, from junior to senior levels!&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the best practices for writing self-documenting code?
&lt;/h2&gt;

&lt;p&gt;When writing self-documenting code, there are several best practices that can help to make the code easier to read and understand. These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using meaningful variable and function names: Variable and function names should be descriptive and convey their purpose and functionality. Avoid using names that are too short or unclear, as this can make the code harder to understand.&lt;/li&gt;
&lt;li&gt;Avoiding abbreviations and acronyms: While abbreviations and acronyms can be useful for saving space, they can also be confusing to other developers who may not be familiar with them. Where possible, use full and descriptive names for variables and functions.&lt;/li&gt;
&lt;li&gt;Breaking up complex code into smaller, more manageable pieces: Complex code can be difficult to read and understand, especially if it is all contained in a single function or method. To make the code easier to read, consider breaking it up into smaller, more manageable pieces. This can also make the code easier to test and debug.&lt;/li&gt;
&lt;li&gt;Using consistent formatting and indentation: Consistent formatting and indentation can make the code easier to read and understand, especially when working with a team of developers. Use a consistent style for variable and function names, as well as for indentation and line breaks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Examples of self-documenting code
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Good Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fn calculate_average(numbers: &amp;amp;[i32]) -&amp;gt; i32 {
    let sum = numbers.iter().sum();
    let count = numbers.len() as i32;
    let average = sum / count;
    average
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we have a simple function that calculates the average of a vector. The function name &lt;em&gt;&lt;strong&gt;calculate_average&lt;/strong&gt;&lt;/em&gt; is descriptive and conveys its purpose. The function takes a slice of integers as an argument, which is also a explanatory name. The function also uses &lt;em&gt;&lt;strong&gt;&amp;amp;[i32]&lt;/strong&gt;&lt;/em&gt; instead of &lt;em&gt;&lt;strong&gt;Vec&lt;/strong&gt;&lt;/em&gt; as it's input parameter, making it more efficient and readable. The variable names within the function are also descriptive and easy to understand, making it clear what each variable represents. The return statement is also clear and concise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fn is_valid_name(name: &amp;amp;str) -&amp;gt; bool {
    name.chars().all(|c| c.is_ascii_alphabetic() || c == ' ')
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This function checks whether a given string is a valid name. The function name &lt;em&gt;&lt;strong&gt;is_valid_name&lt;/strong&gt;&lt;/em&gt; effectively communicates the function's intended purpose. It takes a string slice as an argument, which is also a descriptive name. The function uses the &lt;em&gt;&lt;strong&gt;chars&lt;/strong&gt;&lt;/em&gt; method to iterate over each character in the string, and the &lt;em&gt;&lt;strong&gt;all&lt;/strong&gt;&lt;/em&gt; method to check if every character meets a certain condition. The condition is notably comprehensible and straightforward to grasp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let sentence = "The quick brown fox jumps over the lazy dog.";
let words: Vec&amp;lt;&amp;amp;str&amp;gt; = sentence.split(' ').collect();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we have a simple code that splits a &lt;em&gt;&lt;strong&gt;sentence **_into _&lt;/strong&gt;words**&lt;/em&gt;. The variable names sentence and words convey the meaning behind the variables through a quite descriptive naming. The _*&lt;em&gt;split *&lt;/em&gt;_method is used to split the sentence into words at every space character, and the resulting words are collected into a vector. The code is clear and concise, making it easy to understand what is happening.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bad Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fn f(x: i32, y: i32) -&amp;gt; i32 {
    let a = x * y;
    let b = a / 2;
    return b;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this instance, we encounter a function that computes the area of a rectangle. The name of the function, "f," fails to sufficiently indicate its intended operation. Furthermore, the names of the variables, "a" and "b," fail to provide any insight into their intended use. Additionally, the code within the function lacks self-documentation, thereby obfuscating the specific calculation being performed.&lt;/p&gt;

&lt;h2&gt;
  
  
  IV. Commenting Tricky Stuff
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why it is important to comment tricky or non-obvious parts of the code
&lt;/h3&gt;

&lt;p&gt;Tricky or non-obvious parts of the code can make it difficult for other developers to understand how the code works. These parts of the code may be essential to the functionality of the program, but without proper comments, they can be difficult to decipher.&lt;/p&gt;

&lt;p&gt;For instance, let's say you've developed a program that has a complex algorithm that performs a specific task. It may be difficult for another developer to understand how this algorithm works just by reading the code, even if it has a self-documented approach. By commenting each step of the algorithm, you can help other developers understand how it works, and they can modify or debug the code more efficiently. This will save them time and avoid unnecessary confusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best practices for commenting tricky code
&lt;/h3&gt;

&lt;p&gt;One of the most important aspects of writing clean and maintainable code is adding comments to explain the thought process behind it. One best practice to achieve this is to use inline comments. Inline comments can be placed directly next to the code they are commenting on, providing context and explanations for that piece.&lt;/p&gt;

&lt;p&gt;Additionally, another best practice is to add comments to explain unusual or unexpected behavior. This can help other developers understand why certain decisions were made during the development process and how they might impact the codebase. It is important to keep in mind that not all developers are familiar with the same programming concepts or methodologies, so adding comments can make it easier for everyone to understand the code.&lt;/p&gt;

&lt;p&gt;Highlighting any potential pitfalls or edge cases is also important, as it can help other developers avoid common mistakes and errors. By providing clear explanations and examples of what can go wrong, developers can be better equipped to handle any issues that may arise during the development process.&lt;/p&gt;

&lt;p&gt;In summary, adding comments to explain the thought process behind the code, including inline comments, comments to explain unusual or unexpected behavior, and highlighting potential pitfalls or edge cases, is crucial for writing maintainable and understandable code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples of tricky code and how to comment it effectively
&lt;/h3&gt;

&lt;p&gt;One example of tricky code is code that uses recursion. Recursion can be difficult to understand and may require additional comments to explain how the recursive function works. Adding comments that explain the recursion logic, the base case, and the exit conditions can help other developers understand how the function works and how it contributes to the overall functionality of the codebase.&lt;/p&gt;

&lt;p&gt;Another example of tricky code is code that involves complex algorithms or data structures. In these cases, it can be helpful to add comments that explain how the algorithm or data structure works, as well as any potential issues or limitations. This can help other developers understand how the code works and how they can modify it to fit their needs.&lt;/p&gt;

&lt;p&gt;Code that involves external libraries or frameworks can also be tricky to understand. In these cases, adding comments that explain how the code integrates with the library or framework can be helpful. This can help other developers understand how the code works and how it interacts with the external codebase.&lt;/p&gt;

&lt;p&gt;Finally, code that uses unusual or unexpected syntax or language features can also be tricky to understand. In these cases, adding comments that explain the syntax or features can be helpful. This can help other developers understand how the code works and how it contributes to the overall functionality of the codebase.&lt;/p&gt;

&lt;p&gt;By following these best practices, you can ensure that tricky or non-obvious parts of the code are well-documented and easy to understand. This can help other developers modify and debug the code more efficiently and effectively, leading to a more maintainable and understandable codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  VI. Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, commenting code is an essential part of programming that can bring numerous benefits to developers and teams. By providing context, clarity, and explanations of how the code works, comments can save time and effort by reducing the need to decipher code and allowing developers to focus on problem-solving. Comments can also help to identify potential issues, highlight tricky code, and provide insights into why certain decisions were made during the development process.&lt;/p&gt;

&lt;p&gt;In this blog post, we explored the importance of commenting code and the benefits of doing so. We delved deeper into the different types of comments and provided examples of how they can be used effectively. We also discussed self-documented code and best practices for commenting code, including commenting the method, writing self-documenting code, and commenting tricky code.&lt;/p&gt;

&lt;p&gt;We hope that this post has been helpful in encouraging you to start commenting your code more effectively. By following the best practices outlined in this post, you can ensure that your code is well-documented, easy to understand, and maintainable for years to come. Remember to use clear and concise language, avoid abbreviations and acronyms, break up complex code, and use consistent formatting and indentation.&lt;/p&gt;

&lt;p&gt;In order to improve the maintainability and understandability of our codebases, it's important to adopt a more effective commenting strategy. By commenting our code more thoroughly, we can provide valuable guidance to other developers who may need to work with our code in the future. This can help to prevent confusion and errors, ultimately saving time and resources. Additionally, effective commenting can make our codebases more accessible to developers who may not be familiar with the specific technologies or design patterns we're working with. By explaining our thought processes and providing clear explanations of complex concepts, we can help ensure that our code can be understood and maintained by a wider range of developers. So, let's prioritize effective commenting as a key part of our development process moving forward!&lt;/p&gt;

</description>
      <category>rust</category>
      <category>programming</category>
      <category>rustlings</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Write-up: KodeKloud Sysadmin (Set or Change System's Timezone in Linux)</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Wed, 16 Jun 2021 18:19:17 +0000</pubDate>
      <link>https://dev.to/arturserra/write-up-kodekloud-sysadmin-set-or-change-system-s-timezone-in-linux-2791</link>
      <guid>https://dev.to/arturserra/write-up-kodekloud-sysadmin-set-or-change-system-s-timezone-in-linux-2791</guid>
      <description>&lt;p&gt;In this task, proposed &lt;a href="https://www.kodekloud-engineer.com"&gt;here&lt;/a&gt;, the sysadmin has to change the timezone in the system, to fit Australia/Brisbane. In this post, we'll go through the process to do so in the most recent Linux distributions.&lt;/p&gt;

&lt;p&gt;For starters, you gotta check which timezone your system is currently set. Usually it's defined during the installation process, and it's important for a lot of system-related processes and tasks, like cron-jobs and application logs. To view your current timezone, run the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ timedatectl&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It should return to you a lot of information related to your system's clock, reference time and timezone, like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local time: Wed 2021-06-16 15:04:41 -03   
Universal time: Wed 2021-06-16 18:04:41 UTC   
RTC time: Wed 2021-06-16 18:04:41       
Time zone: America/Fortaleza (-03, -0300)
System clock synchronized: yes 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Remember, if you feel lost during this walk-through, just run &lt;code&gt;timedatectl --help&lt;/code&gt; to get more information on how to correctly change your system's timezone!)&lt;/p&gt;

&lt;p&gt;Now that you already know your current timezone, it's time to run:&lt;br&gt;
&lt;code&gt;$ timedatectl list-timezones&lt;/code&gt; &lt;br&gt;
to check the exact name for your new timezone. For the purposes of this tutorial, let's stick to &lt;em&gt;Europe/Oslo&lt;/em&gt;. We just need to find it in the list (which is quite extensive!) and copy it. If you already know the exact name of the timezone you gotta change your system to, you can just skip to the next step.&lt;/p&gt;

&lt;p&gt;Now, run:&lt;br&gt;
&lt;code&gt;$ timedatectl set-timezone Europe/Oslo&lt;/code&gt;&lt;br&gt;
and it'll change the timezone instantly.&lt;br&gt;
Run again:&lt;br&gt;
&lt;code&gt;$ timedatectl&lt;/code&gt;&lt;br&gt;
and your output should be more or less like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local time: Wed 2021-06-16 20:16:59 CEST
Universal time: Wed 2021-06-16 18:16:59 UTC 
RTC time: Wed 2021-06-16 18:16:59     
Time zone: Europe/Oslo (CEST, +0200)   
System clock synchronized: yes                         
NTP service: active                      
RTC in local TZ: no  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Write-up: KodeKloud Sysadmin (Create a Non-interactive Shell)</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Wed, 09 Jun 2021 17:55:41 +0000</pubDate>
      <link>https://dev.to/arturserra/write-up-kodekloud-sysadmin-create-a-non-interactive-shell-1lfg</link>
      <guid>https://dev.to/arturserra/write-up-kodekloud-sysadmin-create-a-non-interactive-shell-1lfg</guid>
      <description>&lt;p&gt;In this task, proposed &lt;a href="https://www.kodekloud-engineer.com/"&gt;here&lt;/a&gt;, the sysadmin has to create a new user with a non-interactive shell. The full prompt goes as follows:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The System admin team of xFusionCorp Industries has installed a backup agent tool on all app servers. As per the tool's requirements they need to create a user with a non-interactive shell.Therefore, create a user named mark with a non-interactive shell in the app02 server&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To do so, we need to understand two commands in the Linux lexicon: &lt;strong&gt;ssh&lt;/strong&gt; and &lt;strong&gt;adduser&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;First, let's use the &lt;strong&gt;ssh&lt;/strong&gt; command to log into the server specified in the prompt. You can use either&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh -l user server&lt;/code&gt;&lt;br&gt;
or&lt;br&gt;
&lt;code&gt;ssh user@server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;(Remember to replace &lt;strong&gt;user&lt;/strong&gt; to your actual ssh username and &lt;strong&gt;server&lt;/strong&gt; to your actual ssh servername).&lt;/p&gt;

&lt;p&gt;Once we log into the specified server, we are able to create a new user with a non-interactive shell, as prompted before. In this case, we'll need to use a flag from the &lt;code&gt;adduser&lt;/code&gt; command, the &lt;strong&gt;-s&lt;/strong&gt;. According to the adduser's manual page, the &lt;strong&gt;-s&lt;/strong&gt; means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;--shell SHELL&lt;br&gt;
Use SHELL as the user's login shell, rather than the default specified by the configuration file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As it says, it will set the newly created user to a shell. We need to create a non-interactive shell, which means that we need to set the user shell to &lt;strong&gt;/sbin/nologin&lt;/strong&gt;. When we do so, it will prevent the user to login. It's literally written in the nologin manual page the following:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;nologin - politely refuse a login&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The full command we need to run is a combination of:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;sudo&lt;/strong&gt; - To access admin privileges&lt;br&gt;
&lt;strong&gt;adduser&lt;/strong&gt; - The command to create a new user&lt;br&gt;
&lt;strong&gt;user&lt;/strong&gt; - Replace it with the new user's username.&lt;br&gt;
&lt;strong&gt;-s&lt;/strong&gt; - The flag to set a shell to the newly created user&lt;br&gt;
&lt;strong&gt;/bin/nologin/&lt;/strong&gt; - The directory related to the nologin shell.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo adduser user -s /bin/nologin&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Getting started with Penetration Testing and building your own pentest methodology.</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Tue, 09 Mar 2021 01:18:47 +0000</pubDate>
      <link>https://dev.to/arturserra/getting-started-with-penetration-testing-and-building-your-own-pentest-methodology-498a</link>
      <guid>https://dev.to/arturserra/getting-started-with-penetration-testing-and-building-your-own-pentest-methodology-498a</guid>
      <description>&lt;h1&gt;
  
  
  What is Pentesting?
&lt;/h1&gt;

&lt;p&gt;Protecting your business through hacking is a complex and time-consuming skill. This kind of preventive defense framework has multiple faces and categories, but one of the most known is called Penetration Testing (or Pentesting) - a formal procedure aimed at the discovery of new flaws, risks and vulnerabilities inside a company security matrix, and in a predefined scope. When it comes to pentesting, its actor - the pentester - simulates an attack against a Network, Application, or System, in order to find and exploit the said vulnerabilities, usually in a really loud, noisy way and in combination with Blue Team/Security teams inside the company (if any). However, it's impossible to make an impenetrable Network/Application/System, but the pentester will try their best to make it more difficult to bad actors to break through your fences. &lt;/p&gt;

&lt;h1&gt;
  
  
  What is the need of a Penetration Test?
&lt;/h1&gt;

&lt;p&gt;As I mentioned before, no Network/Application/System is a fortress. If you check the number of new vulnerabilities entering the market every year, the rates are &lt;a href="https://meterpreter.org/2020-vulnerability-and-threat-trends-report-the-number-of-cves-will-hit-a-new-high/" rel="noopener noreferrer"&gt;always increasing and breaking new records&lt;/a&gt;. This situation makes it impossible to protect an asset against all kinds of vulnerabilities it's susceptible to, but the asset owners can &lt;strong&gt;harden&lt;/strong&gt; their defenses against them. The expenses a company can suffer from a successful cyberattack can be enormous, costing not only a lot of money, but also their client's trust and their brand's strength. Quoting a book that I really like that investigates the legal and economic aftermath of a cybersecurity breach, &lt;strong&gt;you'll only see this message when it is too late.&lt;/strong&gt; But when it comes to small and medium business, you might not have the opportunity to be "too late", and it might cost your whole business, especially with the findings from CBNC, &lt;a href="https://www.cnbc.com/2019/10/13/cyberattacks-cost-small-companies-200k-putting-many-out-of-business.html" rel="noopener noreferrer"&gt;attesting that 43% of the attacks are aimed against small business, but only 14% are prepared to properly defend themselves&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A penetration tester can expose security holes in that company's protective shell, as well as getting an overall diagnostic on that company security layers. This will, usually, lead to reinforcement and improvement in compliance, defensive mindset and overall security protocols inside the company.&lt;/p&gt;

&lt;h1&gt;
  
  
  How often should I implement a Penetration Test?
&lt;/h1&gt;

&lt;p&gt;As you already saw here, the numbers of new vulnerabilities are sky-rocketing and breaking new records every year. So performing a new penetration test every year should be a regular practice for companies, just to create a better security standard and re-evaluate the health of their security mechanisms. Besides that, a new pentesting assessment should ideally be performed every time a company adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New network infrastructure&lt;/li&gt;
&lt;li&gt;New application launches&lt;/li&gt;
&lt;li&gt;New offices (especially in new locations)&lt;/li&gt;
&lt;li&gt;New major patches or updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However it's good to point out that this must not apply to every company, and it usually depends on their presence online, their budget share allocated to security (if any) and their infrastructure. It's important to note that a company that holds most of its infrastructure in a cloud provider might not be able to perform independent penetration tests, relying on the security assessment conducted by the cloud provider itself. &lt;/p&gt;

&lt;h1&gt;
  
  
  The difference between penetration test and vulnerability assessment/red teaming/bug bounty/CTF
&lt;/h1&gt;

&lt;p&gt;Now that you already know what the basic concepts of a Penetration Test, it's important to also distinguish it from some other security-counterparts. The confusion between any of these different procedures might cause inefficient expenses and lead to unexpected results that might be misleading, causing a scenario where the company will have a wrong evaluation of their security matrix and assets. When it comes to small and medium businesses, these common misconceptions can burn their security budget (or might even be too expensive to even consider be included in the said budget) and still leave holes in the company's shell. So, finally, what all those terms mean?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Penetration Test&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Penetration Test is the process in which the pentester conducts an assessment on a target in order to bring the vulnerabilities to light and exploit them. The &lt;strong&gt;main objective&lt;/strong&gt; in a Penetration Test is to observe the network/system/application through the eyes of a malicious actor, overcoming its defenses and finally evaluating the health status of that asset security matrix, providing detailed information on its attack surface, vulnerabilities and their magnitude and how the defensive mechanisms and teams would react to it. Think of Pentesters as mongol riders, being super loud, attacking everything they can and leaving a lot of tracks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Vulnerability Assessment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Vulnerability Assessment is the process in which the target will be tested, usually with automatic tools and an array of manual tasks, in order to understand and evaluate the security of the assets. Different from pentests, Vulnerability Assessments should be more frequent, in order to constantly update the asset defense and lower its attack surface, especially when new vulnerabilities related to the services or applications used in the target network/application/system is released (and, as you remember, they pop up almost every day!). &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Red Teaming&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you could imagine a Penetration Test as a mongol rider attack, you can imagine Red Teaming as a long campaing of ninja attacks. A Red Teaming assessment is a more focused, stealthy operation, aiming to understand the core of the security protocols in the company's human, technological and physical assets. After the Vulnerability Assessment and the Penetration Test were performed, a company with a more mature and sophisticated approach to security issues could force and benchmark its security protocols with a Red Teaming Assessment, involving not only technological aspects - as in a penetration test - but also physical components - like computers, telephones, peripherals - and human assets, via Social Engineering. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bug Bounty Program&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bug bounty programs are usually offered by companies with a higher security-allocated budget and a refined Cybersecurity strategy, in order to constantly test and update their endpoints and applications. A Bug Bounty program is highly scalable due to its pay-for-vulnerability model - in contrast to the usual pay-for-time model in Penetration Test cases -, as well as common crowdsourced bug bounty platforms such as Bugcrowd, Hackerone and Intigriti. An outstanding advantage provided by the Bug Bounty Program is that it offers multiple perspectives from different security researchers, and this multicultural, multifaceted approach can result in different approaches on how to exploit an asset, bringing a more real-world touch to the assessment (which is clearly an advantage for companies that have an intense internet presence worldwide).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CTF&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Capture-the-Flag games (or CTFs) are really good training models for enhancing one's penetration testing skills, but they are not good examples for real-world practices. For starters, usually a CTF consists of attacking a vulnerable-by-design target, finding its vulnerabilities, escalating privileges and finding "flags", pieces of text hidden inside the target. Once you found the flags, your job is done. That's not how it happens on a pentest, where you need to implement post-exploitation techniques, find relevant information inside the exploited target (not only flags) and test every way you can find to breach that asset (in contrast to CTFs, where you are after that &lt;strong&gt;one&lt;/strong&gt; way to exploit the target and get the flags in the shorter amount of time possible). However, no one doubts the efficiency of these games to improve one's hacking skills, which is, of course, a good way to get more people into the minutiae of security attacks, even if they are not penetration testers themselves.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Setting Up a Pentesting Lab
&lt;/h1&gt;

&lt;p&gt;You read about pentesting, understood its concepts and got a brief explanation on other security fields related to that. So, what's next? If you thought "It's time to learn the practicalities of it myself", then you're right! But, before you start practicing in a controlled environment (remember, pentesting a live target without permission is considered a crime), you need to set up your lab, and that's what we are going to do right now.&lt;/p&gt;

&lt;p&gt;The first you need to worry about is your operational system. When it comes to Penetration Testing there are multiple options, but the two most popular ones are Kali Linux and ParrotOS. Both of them are Debian-based Linux distributions, with support for either 32-bit or 64-bit architecture, with an outstanding out-of-the-box support for useful pentest-related tools that are going to make your life easier. Just install them, find a legal practicing target and start hacking! No need to install multiple tools (even though some of them could be a nice add if you have a few minutes to spare), no need to spend a lot of time configuring stuff... They are already there!&lt;/p&gt;

&lt;p&gt;Once you get more experienced with all the tools you need to better fit your own Methodology, you can start looking for some other options out there, or even create one distribution yourself with every single thing that's necessary to get the job done! But right now I suggest you stick to one of those, for the reasons I explained before. You don't wanna spend a lot of time looking for installation tutorials for every single tool you need, when there's already something out there with all of those tools packed in a single box, ready for use! Before you pick Kali or Parrot, I suggest you take a look and research a bit about the difference between them, especially related to the system requirements. Kali might be a little more greedy, component-wise, but the final decision is up to you.&lt;/p&gt;

&lt;p&gt;One more thing: Those are hacking-specialized operational systems, so you are going to handle with all sorts of stuff there, which may include malware analysis. So it's recommend that you run them on a Virtual Machine, on top of your regular OS. However, this approach can be really resource-intensive, requiring 8GB or more of your RAM. So if you don't want to do that, no worries: You can still install one of those systems as your main one, but you need to be extra careful about what you do. But, once again, the final decision is up to you, so before you commit to any final words on any of these subjects, do your own research, think about it yourself and then proceed to do whatever floats your boat!&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the Virtual Machine
&lt;/h2&gt;

&lt;p&gt;So let's get our hands dirty and start installing our tools! The first thing you'll need is a Virtual Machine. The best, free options out there are VMWare Workstation and Oracle VM VirtualBox. Once again, I recommend you do your own research to choose whatever is the best for you, but for the matters of this post I'll stick to VirtualBox. It's my favorite from those two options and I run it on every setup I use at home, basically because I got familiar with it during my graduation and things seem natural and seamless for me when it comes to configure a new machine on it. That being said, the first thing you'll need to install it is visit their website on &lt;a href="https://www.virtualbox.org/wiki/Downloads" rel="noopener noreferrer"&gt;https://www.virtualbox.org/wiki/Downloads&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwn095ccwmtloh3lqqi8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwn095ccwmtloh3lqqi8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose the platform package related to your host machine, then click on it and once the pop message shows up, save it. In my case, I'm on a Windows machine, so you might see something more or less like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsusxfxxuvv3bfksupczz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsusxfxxuvv3bfksupczz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it's downloaded, just click on the file and execute it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflzqg83i9c0i6f91exla.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fflzqg83i9c0i6f91exla.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on "Next" when prompted, until you reach the "Install" button. Then proceed to click on it as well, and wait for the installation wizard to complete its process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4dsow2619s973nmb2o7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4dsow2619s973nmb2o7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once it's done, just open Virtual Box and you'll be ready for the next step!&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing your Operational System
&lt;/h2&gt;

&lt;p&gt;For the purposes of this tutorial, we'll choose Kali Linux over ParrotOS, again for familiarity reasons. I've been working on Kali for a couple of years now, and I'm just more familiarized with it. However, in the past few months I've been closely watching ParrotOS release after release, and in the near future I might switch my main pentesting operational system, simply because the features and UX pleases me more than the latest Kali releases. That being said, let's head over to Offensive Security website and download our Virtual Machine-ready Kali Linux release on &lt;a href="https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/" rel="noopener noreferrer"&gt;https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/&lt;/a&gt; and click on the VirtualBox Images tab (be careful not to click on the Kali Linux VMWare Images tab!).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxz34mevyk4sayf1elyjb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxz34mevyk4sayf1elyjb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you're done downloading the Kali image, let's configure it in the VirtualBox. Open VirtualBox and then click on &lt;strong&gt;New&lt;/strong&gt; on the top menu or in Machine → New (alternatively, you can also press Ctrl+N)&lt;strong&gt;.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh980n39yu6mkm0hv7tfx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh980n39yu6mkm0hv7tfx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will pop up the "Name and Operating System" screen, which has some pre-filled fields in it. Usually it comes with a default Windows configuration, but we need to change it to our Kali image. In the &lt;strong&gt;Name&lt;/strong&gt; field you can write whatever you want. It will be your identifier for all the Virtual Machines you'll have in your Virtual Box, but for organizational reasons, let's call it &lt;strong&gt;Kali Linux&lt;/strong&gt;. Select the folder where you want you VM information and snapshots to be saved inside the &lt;strong&gt;Machine Folder&lt;/strong&gt; field. For &lt;strong&gt;Type&lt;/strong&gt; you select &lt;strong&gt;Linux&lt;/strong&gt; and finally &lt;strong&gt;Debian (64-bit)&lt;/strong&gt; or &lt;strong&gt;Debian (32-bit)&lt;/strong&gt;, depending on you own machine's architecture. Once everything is more or less like in the screenshot below, hit Next.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ecvgu6w3isleixqiw8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ecvgu6w3isleixqiw8x.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Up next is the Memory Size screen, where you're going to select how much RAM resources you are going to allocate to your Virtual Machine. If you have enough RAM to allocate at least 8GB to Kali Linux, most things are going to run smoothly and you won't have a lot of trouble. If you don't have 8GB to allocate, I sugest you switch to ParrotOS or install Kali as a &lt;a href="https://www.kali.org/docs/usb/live-usb-install-with-windows/" rel="noopener noreferrer"&gt;LiveUSB&lt;/a&gt;. You can also run with less than 8GB, but it might get super slow and cranky halfway through your pentesting assessments. Once you decided which option suits you best, hit on Next and let's move to the next section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6v8hywqxu9sszetxnwm5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6v8hywqxu9sszetxnwm5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the Hard Disk screen we just need to select &lt;strong&gt;Create a virtual hard disk now&lt;/strong&gt; and hit Create.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr78nbflfpuubp4w0p3a5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr78nbflfpuubp4w0p3a5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will pop up the Hard Disk File Type screen, and in this one we select VDI (VirtualBox Disk Image).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwplayb17m48kw8hpwmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwplayb17m48kw8hpwmz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The following section is the Storage on Physical Hard Disk screen, and in this one we'll select &lt;strong&gt;dynamically allocated&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbm21mwkazj1drtinyje0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbm21mwkazj1drtinyje0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;File Location and Size&lt;/strong&gt; screen, we gotta select how much of our actual hard disk will our Virtual Machine be able to use. I like to select 80GB, especially because Kali Linux already comes packed with most of the tools you need to do your job, so you won't be downloading new stuff like crazy. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtfkzpydnolhqmtzns5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtfkzpydnolhqmtzns5h.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you click on create, the pop-up screen will fade and you'll be back on the home Virtual Machine menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcia9ynjc1iitlcrz8fey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcia9ynjc1iitlcrz8fey.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the wizard completely done, let's click on Settings (Ctrl + S)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0e32ixawgkepm7ajojhr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0e32ixawgkepm7ajojhr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the Settings screen pop-up for us, let's click on General and then on Advanced, and change both the Shared Clipboard and Drag'n'Drop options to &lt;strong&gt;Bidirectional&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnsgki9pqo7ozgvya0gbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnsgki9pqo7ozgvya0gbx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we change to the System tab on the left side menu, and then on the Motherboard tab we need to be sure to select only &lt;strong&gt;Hard Disk&lt;/strong&gt; and &lt;strong&gt;Optical&lt;/strong&gt; as boot options, and use the up and down arrows to make the boot order be: Hard Disk first and Optical second.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F882pxde7od0n2y4pcetg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F882pxde7od0n2y4pcetg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Still on the System Settings we move to the Processor tab and select the Processor usage to &lt;strong&gt;2 CPU&lt;/strong&gt;s and &lt;strong&gt;enable PAE/NX&lt;/strong&gt; on the Extended Features checkbox.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09vrh54yl0d8tpbfr14j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09vrh54yl0d8tpbfr14j.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The on the Display settings we go to the Screen tab and move Video Memory all the way up to 128MB. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uob7t9b3uca2c7mrwqy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uob7t9b3uca2c7mrwqy.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Network Settings we gotta select the type of Network connection our Virtual Machine will have, and there are three main options when it comes to Pentesting: &lt;strong&gt;NAT&lt;/strong&gt;, &lt;strong&gt;Bridged&lt;/strong&gt; and &lt;strong&gt;Host-Only&lt;/strong&gt;. NAT will leave your machine running as if it was on your own home network with your host machine acting like a wireless router, while the guest machines will be in a private subnet. This is optimal to your VMs connect to other VMs and also to the outside world, however your host will filter that connection.&lt;/p&gt;

&lt;p&gt;Host-Only is accessible, as it implies, only by the host machine your VM is running on. This is an optimal network situation to be isolated from the outside world and experiment on private test web servers and malware analysis (since it cannot connect to malicious hackers in the wild).&lt;/p&gt;

&lt;p&gt;Bridged runs your VM in the same network as your host, and it can be accessed by all computers in the host network. &lt;/p&gt;

&lt;p&gt;Usually &lt;strong&gt;NAT&lt;/strong&gt; will be okay for all pentesting purposes, but sometimes you want to use an exploit that needs to connect to your computer, and in this case NAT might cause some trouble. You can switch to &lt;strong&gt;Bridged&lt;/strong&gt; if that's the case, since it offers a more "down to earth" type of connection to the outside world. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5laj0ciqir7sq62p5jx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5laj0ciqir7sq62p5jx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you're done, click on OK and go back to the home menu. Your VM information will look more or less like this one&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30hu7eo69m07oc0wmwfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30hu7eo69m07oc0wmwfm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we click on &lt;strong&gt;Start&lt;/strong&gt; on the top menu, and it will pop up another screen, asking for you the select the start-up disk. Since we're going to use the Kali image we downloaded, click on the folder icon with the arrow up in front of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firlt5h4xdnzkv27noox6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firlt5h4xdnzkv27noox6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will open a new pop-up, and then we need to click on &lt;strong&gt;Add&lt;/strong&gt;, to add a new disk image. Navigate to where you ISO file is stored, and click on it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdv38oqso3tulrlbvfdwe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdv38oqso3tulrlbvfdwe.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've located your file, just hit &lt;strong&gt;Start&lt;/strong&gt; and you'll be done with your process! Time to open your Kali Machine and get started!&lt;/p&gt;

&lt;h1&gt;
  
  
  Building Your Pentest Methodology
&lt;/h1&gt;

&lt;p&gt;Before jumping into practice, let's agree on the structure of our penetration test. Whatever you (and other penetration testers) will do along the way may vary, but the structure is usually the same. You can find detailed information on &lt;a href="http://www.pentest-standard.org" rel="noopener noreferrer"&gt;pentest-standard.org&lt;/a&gt; and other sources, but I'll summarize it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kg9obgf01cnf4y9qihz.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kg9obgf01cnf4y9qihz.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, to provide a deeper dive into all these different phases, let's select a room on TryHackMe where we can legally utilize all tools and explain the structure step-by-step, and how to build your methodology through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 1 - Pre-Engagement Phase
&lt;/h2&gt;

&lt;p&gt;The pre-engagement phase represents the first contact between the client and the pentester. The objective of this phase is to define the scope of the penetration test, as well to explain to client predefine a time estimative for the whole assessment. Some questions must be asked and a good understanding of the scope must be perfectly determined. &lt;/p&gt;

&lt;p&gt;In our example, we are going to test our methodology with &lt;a href="https://tryhackme.com/room/ultratech1" rel="noopener noreferrer"&gt;TryHackMe's Ultratech&lt;/a&gt;. Considering our pre-engagement discussions, our &lt;strong&gt;scope&lt;/strong&gt; would be the machine's IP: 10.10.148.123 and the &lt;strong&gt;time estimative&lt;/strong&gt; would be the box's expiration time, 1h (52m 14s here in the screenshot).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh4t8qe6al0xv044ocie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh4t8qe6al0xv044ocie.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 2 - Information Gathering
&lt;/h2&gt;

&lt;p&gt;This is arguably the most important step in a penetration test. During this phase the pentester will collect intelligence on the target defined in the scope, in order to understand the target's attack surface and start to strategize on their attack vector. As it's stated in the Pentest Standard, "The more information you are able to gather during this phase, the more vectors of attack you may be able to use in the future". &lt;/p&gt;

&lt;p&gt;In our case, let's start figuring out how many open ports there are in our target. To do so, we can run rustscan via a docker container using:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run -it --rm --name rustscan rustscan/rustscan -a 10.10.148.123&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let me explain this command to you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;docker&lt;/strong&gt; &lt;strong&gt;run -it —rm —name&lt;/strong&gt; - activates the docker container I am using rustscan from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rustscan&lt;/strong&gt; - Rustscan is a powerful and superfast network scan tool, way better and faster than the traditional and well-known Nmap when used to identify open ports. When running a professional pentest (that will probably have a few days or weeks as time estimative) you can run rustscan multiple times and also an Nmap or other tools (like hand-crafted Python scripts) to be really sure which ports are open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;/rustscan&lt;/strong&gt; - Rustscan's version, defining which container will be selected and utilized (in this case, since there are no special version predefined, it's running the latest).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.10.148.123&lt;/strong&gt; - Our target IP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since Rustscan is not packed natively inside Kali Linux, you might find useful information on how to install it in the official documentation &lt;a href="https://hub.docker.com/r/rustscan/rustscan" rel="noopener noreferrer"&gt;https://hub.docker.com/r/rustscan/rustscan&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to run nmap as well for an all-ports scanning, you can run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nmap -sC -sV -p- 10.10.180.145&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;nmap&lt;/strong&gt; - Activates nmap&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-sC&lt;/strong&gt; - Will run nmap's script reconnaissance, identifying which scripts might be useful against each of your findings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-sV&lt;/strong&gt; - Will determine which service version is running on each of the open ports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-p-&lt;/strong&gt; - Will run the nmap against all 65,535 ports available for communication. This is why it takes so long to be done, but when it's done you'll have proper information on all the available ports, instead of the standard top most common ports outcome you'll get running a simple &lt;strong&gt;-p&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The outcome from Rustscan will return: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yd9avzq7lwng7ljmopm.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yd9avzq7lwng7ljmopm.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So now we know we have ports &lt;strong&gt;21, 22, 8081&lt;/strong&gt; and &lt;strong&gt;31331&lt;/strong&gt; open. In my methodology, after running Rustscan, I like to run a complete Nmap focused on the open ports, which will return detailed information on the ports that I already know that are open. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;nmap -T4 -A -Pn -v -p 21,22,8081,31331 10.10.148.123&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;nmap&lt;/strong&gt; - Activates nmap&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-T4&lt;/strong&gt; - Defines how fast nmap will perform the scan. The speed varies between T1 and T5, the latter being the fastest as well. However, it's important to note that it's also a very "noisy" approach, probably being easily detected by a mildly secure target. Normally it's not ideal to use such a fast speed in a real-world target, but it can be also a good tactic to try to run the same nmap scan with different speeds, in order to have a better understanding on the target's defenses, and what it can really identify.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-A&lt;/strong&gt; - Enables OS detection, version detection, script scanning, and traceroute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-Pn&lt;/strong&gt; - Treats all hosts as online -- skip host discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-v&lt;/strong&gt; Increases verbosity level, returning more detailed information on each step of the scan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-p&lt;/strong&gt; - Defines which ports will be scanned. If it's not specified, it will run against the top 1000 most common ports. In this case, we are specifing the ports with the findings we got in the previous step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;21,22,8081,31331&lt;/strong&gt; - The ports we found out with Rustscan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10.10.148.123&lt;/strong&gt; - Our target's IP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core information outcome from the nmap scan is detailed in the screenshot below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqzor6xr8dvd9mptk93h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqzor6xr8dvd9mptk93h.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 3 - Enumeration
&lt;/h2&gt;

&lt;p&gt;One can argue that Information Gathering and Enumeration are the same steps. I would add that the process of gathering information can be extensive and even include the Phase 4 - Vulnerability Analysis in the process. No matter how you call those phases, one thing should be learned before all of this: Gather as much information as possible. Enumerate every port you find, analyze and model your threats as much as you can. This will make your life easier in the following steps, and this will also provide a lot of useful and valuable information to your client: At the end of the day, it's your job to inform them as much as you can, so the more you get out of this big &lt;em&gt;Discovery Phase,&lt;/em&gt; the better.&lt;/p&gt;

&lt;p&gt;Now that any naming issues have been disclaimed, let's move on with our analysis. We know the open ports already, so let's start exploring them. In my personal methodology, I like to address any HTTP Ports to see if they have a functional website from where I can extract more information. So let's start with our target's IP + 8081 (the first open HTTP Port from our scan).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbsclci8bj4smg2h2f6h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbsclci8bj4smg2h2f6h.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, this particular website looks like it's just a work-in-progress. Let's keep this as a note, and try the other open HTTP Port, 31331&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foi0o1j5c6fg8gpa0id98.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foi0o1j5c6fg8gpa0id98.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have something cool here! This looks like a more complete, production-ready website. As a pentester, it's our job to explore every corner of this website looking for potential input areas, hidden information and every sorts of alluring things we can add to our report. In my case, I like to explore hidden directories first, since there are a lot more than meets the eye when it comes to web applications. Common practices such as running &lt;strong&gt;GoBuster&lt;/strong&gt; or &lt;strong&gt;DirBuster&lt;/strong&gt; can be really useful, but I like to start simple before running my big, brute-forcing guns. The more you explore web applications, the more you'll notice a pattern when it comes to hidden directories, and then you can also start writing your own personal list of directories you can start checking out for. In my case, considering how important it is for applications nowadays to have a good SEO policy in their websites, I like to start from a very common &lt;strong&gt;robots.txt&lt;/strong&gt; file.&lt;/p&gt;

&lt;p&gt;But first, what is a &lt;strong&gt;robots.txt&lt;/strong&gt; file? To make it short, when Google bots are scrapping your website after keywords to enhance your SEO strategy and put it in the front page in every google search, they will look for what they need in every directory. However, you can indicate to them which directories they should &lt;strong&gt;NOT&lt;/strong&gt; look for any keyword, and the way you indicate it to them is by configuring these directories in the &lt;strong&gt;robots.txt&lt;/strong&gt; file. The reasons may vary, but usually the directories found in this file are really important for administrative work in the website, and they are also hidden from the public eye, which means that some really good intel can be found there. Some other files and folders that can bring you good information are &lt;strong&gt;admin, login and upload&lt;/strong&gt; pages. But let's start with :31331/robots.txt to see what we can get.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75kniduuk3ili8fm049y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75kniduuk3ili8fm049y.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nice! We got some cool information about the site map, so let's go after it now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9gs1mxmgc04wgohw1fek.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9gs1mxmgc04wgohw1fek.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A lot more information for us! Now we know about 2 pages we can explore (index.html is just the landing page), and we didn't even had to run a brute-forcing tool for that! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqlua5amdo3pz2w8lpmi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqlua5amdo3pz2w8lpmi.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Looking for the &lt;strong&gt;what.html&lt;/strong&gt; page, we can notice that it's just a work in progress page. We can look for any hidden in the source code, but apparently there are nothing outstanding hanging there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft0mwrjjmvlw5zrcis6ao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft0mwrjjmvlw5zrcis6ao.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we go after that &lt;strong&gt;partners.html&lt;/strong&gt; page, however, there is a login form there, just chilling. Login forms are amazing doors to the inner workings of a company, and exploiting them can be a really damaging.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovyjzujla71gikhoeu0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovyjzujla71gikhoeu0a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, if we look in the source code, we are able to see some intriguing findings. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7edi4pz88i1pdyzus4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7edi4pz88i1pdyzus4t.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here we have a link to an &lt;strong&gt;api.js&lt;/strong&gt; script, and after clicking on it, we are able to find the script's code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbe4ag12iuh2v63jr7jz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbe4ag12iuh2v63jr7jz2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a really cool line of code here, and this is the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const url =&lt;/code&gt;http://${getAPIURL()}/ping?ip=${window.location.hostname}``&lt;/p&gt;

&lt;p&gt;According to the code, it will try to ping the API to check if it's working. We can look for more information on this, by tweaking the parameters a bit and running it on our browser. Let's first it try with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://10.10.147.25:31331/ping?ip=10.9.208.115&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let me explain what I changed here. I switched the &lt;code&gt;**${getAPIURL()}**&lt;/code&gt; field to our target's IP + the HTTP Port we are at right now. And I changed the &lt;code&gt;**${window.location.hostname}**&lt;/code&gt; parameter to our machine's IP, in order to test if it can ping back our machine. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuwxcmkd9estutbvuxat.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuwxcmkd9estutbvuxat.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hmmmm, apparently it didn't work as expected. However, if you remember, there are another HTTP Port open in this application, the 8081. Let's try with this one now by running &lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://10.10.147.25:8081/ping?ip=10.9.208.115&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlicvbcog6gpy4yj462u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlicvbcog6gpy4yj462u.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay, this is way better! The output confirms that we can actually run and see terminal commands in our web browser! Now let's run a &lt;strong&gt;ls&lt;/strong&gt;, the Linux command to list all the files in a given directory, with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://10.10.147.25:8081/ping?ip=&lt;/code&gt;ls``&lt;/p&gt;

&lt;p&gt;It's a similar command from what we've used before, but now with a &lt;code&gt;ls&lt;/code&gt; at the end instead of our machine's IP parameter. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0iab2sprte8jj3ao8yf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0iab2sprte8jj3ao8yf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have some more information about a database related to our target application, that can be really useful for us.&lt;/p&gt;

&lt;p&gt;So let's start exploring this database by running a &lt;code&gt;cat&lt;/code&gt; on it. The whole command would be &lt;code&gt;cat utech.db.sqlite&lt;/code&gt;, so we need to write &lt;code&gt;http://10.10.147.25:8081/ping?ip=&lt;/code&gt;cat utech.db.sqlite`` in our browser, which returns: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsviyqwklmu5dcqwaz8sq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsviyqwklmu5dcqwaz8sq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Awesome! Now we have some (hashed) credentials that we can use. I mean, as soon as we decode them. So let's start creating some new files to store them in our machine. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh34xgsxeibyiohg3we3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh34xgsxeibyiohg3we3y.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To crack the hashes, first we gotta know which hashing algorithms were used to hash them in the first place. We can run &lt;code&gt;hash-identifier f357a0c52799563c7c7b76c1e7543a32&lt;/code&gt; in order to retrieve information about it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ikii018p5wbefd9zzri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ikii018p5wbefd9zzri.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;hash-identifier&lt;/strong&gt; has disclosed that it's possibly a MD5 hash that we are dealing with. &lt;/p&gt;

&lt;p&gt;To look for a reverse lookup (since hashes are impossible to crack) we can go to &lt;a href="https://md5hashing.net/hash" rel="noopener noreferrer"&gt;https://md5hashing.net/hash&lt;/a&gt;. This website is linked to a database of hashes and their original values, and it compares whatever string it gets as input with values stored in the database in order to "decrypt" them. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyxzy3iromn32pyr1tky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyxzy3iromn32pyr1tky.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4en992d14xgbko9iedf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4en992d14xgbko9iedf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nice, so now we have full credentials for one of the users! &lt;strong&gt;r00t:n100906&lt;/strong&gt; is something we can use later, for sure. Now, let's repeat the same steps with the other user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivq278ny1quo6cettbav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivq278ny1quo6cettbav.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then, finally: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6xx8iu4kzs9vnr9u3i9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6xx8iu4kzs9vnr9u3i9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, now we didn't get a decrypted value from this. Which is okay, not all values can be stored in the decryption database, and sometimes - even if you have a specified wordlist with all the possible values for a credential - you won't get a result from it. That's a good point for the company (even though leaving hashes accessible to malicious actors is a massive negative point), so for brevity reasons we can move on to the next phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 4 - Vulnerability Analysis
&lt;/h2&gt;

&lt;p&gt;In this phase the pentester will leverage the systems and applications and their correspondent vulnerabilities. They will analyze the scope for each attack vector found out until this moment, and they will consider the best way to exploit them. In our case, we know that our target runs a FTP on port 21 and a SSH on port 22. It also runs some websites and, most importantly, even a login page. You can abuse your Google-Fu skills, and also get any information available and use &lt;a href="https://www.exploit-db.com/" rel="noopener noreferrer"&gt;https://www.exploit-db.com/&lt;/a&gt; or &lt;code&gt;searchsploit&lt;/code&gt; on the command line. In my personal taste I like to try low-hanging fruits first, or simply the obvious stuff. It's pretty common to overengineer your attack and try some extreme techniques, but sometimes you just need to keep it simple to attest that your target system isn't that secure. &lt;/p&gt;

&lt;p&gt;That being said, we stand here with a lot of useful information about our target system already, including some credentials and three possible places where we can use them to move on to the Exploitation Phase: FTP, SSH and the login page. With that in mind, let's do as I said and try those.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 5 - Exploitation Phase
&lt;/h2&gt;

&lt;p&gt;The Exploitation phase is the moment where you gather all the information acquired in the previous phases, and apply them with the sole objective of bypassing the target system's defenses and establish access to it. As I mentioned before, if the Vulnerability Analysis Phase was carefully planned, this current phase should be a precise attack. With our plan to use the credentials in mind, let's go and execute it.&lt;/p&gt;

&lt;p&gt;By going to the :31331/partners.html, which is a login page, we use the credentials we found during the Enumeration phase, but it leads to a dead end. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fib4jdv0fh88lbu1kepcq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fib4jdv0fh88lbu1kepcq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's okay. We keep this as a note, and move on to our second vector, the SSH on port 22. By using the credentials there, we can get into the system! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7hzrqprmyx5x6c16b6ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7hzrqprmyx5x6c16b6ul.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Those credentials can also be used to log into the FTP service, as showed in the screenshot below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3k5e8uc2d9vq2mfh8t3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3k5e8uc2d9vq2mfh8t3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay, now that we have access in multiple fronts, we can say that we performed a successful Exploitation Phase. &lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 6 - Post-Exploitation Phase
&lt;/h2&gt;

&lt;p&gt;This phase is the proof that a well-executed penetration test won't finish once the pentester obtained access to the machine. Now it's time to move on and try to (if previously agreed on the pre-engagement phase, of course) 1) Observe which sensitive files that can be accessed by a possible attacker 2) Try to escalate privileges 3) Cause denial of service 4) Maintain and persist access for later exploitation. &lt;/p&gt;

&lt;p&gt;We can start looking around for critical files, but a good way a CTF-based box such as the ones we can find on TryHackMe and HackTheBox emulates these files is by using flags. One has to keep in mind that flags alone are not what you will see on a real-world scenario. That being said, let's try to look for the root user SSH private key, as specified by the &lt;a href="https://tryhackme.com/room/ultratech1" rel="noopener noreferrer"&gt;original box exercise&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;To check which programs can be accessed by the super user on Linux, I like to run &lt;code&gt;sudo -l&lt;/code&gt;. This can be a good way to enumerate attacking vectors for you to escalate your privileges to the root user. However, in this specific case, this didn't work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5nov6lub2bosglri8f8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5nov6lub2bosglri8f8u.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As we can see in the screenshot above, the r00t user (just a regular user, not the actual root user) is part of a docker group, which can be a way to escalate privileges. We can check this out and confirm our theory by running LinEnum, that we can find on &lt;a href="https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh&lt;/a&gt;. Once we access it, we just need to copy the raw code, move back to the r00t base directory, create a &lt;strong&gt;&lt;a href="http://linenum.sh" rel="noopener noreferrer"&gt;linenum.sh&lt;/a&gt;&lt;/strong&gt; file (using &lt;strong&gt;nano&lt;/strong&gt; or &lt;strong&gt;vim&lt;/strong&gt;, for example) and paste it there, save the file and make it executable by running &lt;code&gt;chmod +x linenum.sh&lt;/code&gt; ****&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2esraqqmwz7h4ornimzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2esraqqmwz7h4ornimzg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can now run &lt;code&gt;./linenum.sh &amp;gt; lin&lt;/code&gt; to run the script and save the information in a newly created &lt;strong&gt;lin&lt;/strong&gt; file. It might take a while, but once it's done we just need to open that file to get the following outcome: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2wqx67mknozgq4nnv17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2wqx67mknozgq4nnv17.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the script mentioned there, looks like we're hosting Docker, and we could possibly misuse this group's permissions. &lt;/p&gt;

&lt;p&gt;An awesome resource for privilage escalation is the GTFOBins, and it has a specific section just for docker exploitation, as we can find here - &lt;a href="https://gtfobins.github.io/gtfobins/docker/#sudo" rel="noopener noreferrer"&gt;https://gtfobins.github.io/gtfobins/docker/#sudo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one specifically explains how we can move to sudo by misusing Docker permissions, and we just need to run a simple command: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo docker run -v /:/mnt --rm -it alpine chroot /mnt sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;However, this command will try to get a vanilla docker box - alpine - and in our case it won't work properly. With a simple tweak, however, we can change this. We just need to switch from alpine to &lt;strong&gt;bash&lt;/strong&gt; and remove the sudo command, since we're not currently running as sudo*&lt;em&gt;:&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run -v /:/mnt --rm -it bash chroot /mnt sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After a short wait, the exploit concludes and we have sucessfully escalated our privileges&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffin437tlgz107em55mlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffin437tlgz107em55mlp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we are running out the highest of the privileges, we can start looking for useful information - as it's mentioned as the main objective of the post-exploitation phase.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faryjnxt8sx0ybbme77l6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faryjnxt8sx0ybbme77l6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here we can find some critical, sensitive information, such as this &lt;strong&gt;private.txt&lt;/strong&gt; file and the &lt;strong&gt;SSH keys&lt;/strong&gt;. This is an awesome finding, and for the context and scope of this box, it also concludes our post-exploitation phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 7 - Reporting Phase
&lt;/h2&gt;

&lt;p&gt;This is the point where you are going to conclude all processes, findings, attacking vectors and analysis from your whole penetration test assessment, in a clear, objective language that will make it easy to understand for the stakeholders that will use it to lead their decision-making process in the company. This is arguably the second most important Phase in the whole process, sometimes even more important than the Information Gathering Phase, because if it's not clear, the whole assessment won't be useful at all to the company.&lt;/p&gt;

&lt;p&gt;There are a lot of models and layouts for you to create your own reports, but the most important aspect of it is the need to be understood. Details are also important here, and a good guideline can be found at &lt;a href="http://www.pentest-standard.org/index.php/Reporting" rel="noopener noreferrer"&gt;http://www.pentest-standard.org/index.php/Reporting&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This concludes this post, which was written with the intention to kickstart people into Pentesting and Cybersecurity. However, this isn't a final read, just a suggestion on how you can start developing your own methodology. I recommend you start researching on other people's methodologies, as well as practice a lot of techniques on CTFs and even bug bounties. This will get the gears spinning and making things easier to understand in the long run. &lt;/p&gt;

&lt;p&gt;I wrote another post on how to get people started in Cybersecurity that can be useful for you to get a bit of a direction, so if you need to start somewhere, you can go there. And keep in mind that Cybersecurity is an ever-evolving field, so never stop learning. Try new stuff everyday, read a lot, get new perspectives on subjects you &lt;em&gt;thought&lt;/em&gt; you had mastered, and stay humble! You'll never know everything, so be respectful with people that are just starting. Help them and try to learn something from them as well, because I do believe everyone has something to teach to someone else, no matter their levels of experience. &lt;/p&gt;

&lt;p&gt;Keep on practicing, and connect with me on &lt;a href="https://twitter.com/thearturserra" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; to ask any questions and give some feedback (or just chat!) &lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>hacking</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>An Introdution to Networks - A TryHackMe Introductory Networking WriteUp</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Tue, 23 Feb 2021 19:29:33 +0000</pubDate>
      <link>https://dev.to/arturserra/an-introdution-to-networks-2gll</link>
      <guid>https://dev.to/arturserra/an-introdution-to-networks-2gll</guid>
      <description>&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;Understanding how packets travel from one endpoint to another in the Network, as well as understanding how to properly secure or intercept those packets, is an invaluable knowledge when it comes to Cybersecurity. Networking can be subdivided into multiple subjects and in this article we'll look deeper into this concept, in order to learn how important it is to understand Networking.&lt;/p&gt;

&lt;h1&gt;
  
  
  Acknowledgements
&lt;/h1&gt;

&lt;p&gt;I'm writing this article as part of my process to take eJPT and just fixate the knowledge I got from INE's official Learning Path, &lt;strong&gt;Penetration Testing Student, by Lukasz Mikula&lt;/strong&gt;. I truly believe that learning is more of an active process than a passive one, so I do think I can better understand things once I'm teaching other people about that subject and practicing around it. I'll try to take this approach in this article as well. We'll start with a bit of theory, which is really necessary when it comes to Networking, but we'll go practical as well with &lt;strong&gt;TryHackMe's&lt;/strong&gt; rooms. I'll do my write-up to all the &lt;a href="https://tryhackme.com/room/introtonetworking" rel="noopener noreferrer"&gt;necessary rooms&lt;/a&gt;, so you can learn a bit more about my methodologies and try them yourself. No worries if you just do a step-by-step follow-up in the beginning, as long as you understand all the procedures and start to build your own processes and methodologies. &lt;/p&gt;

&lt;p&gt;The main objective with this article, at the end of the day, is to provide an easy-to-understand starting guide to all those who want to kickstart their lifes in Cybersecurity. It can also work as a study companion material to all those who are studying to eJPT. It can also be a study companion to newcomers in the CTF community, who just joined TryHackMe and want to get some write-ups for a bunch of popular rooms. Or it can just be a study guide to introduce some core concepts from Cybersecurity to curious people!&lt;/p&gt;




&lt;h1&gt;
  
  
  Networking Fundamentals
&lt;/h1&gt;

&lt;h2&gt;
  
  
  OSI Model - An Overview
&lt;/h2&gt;

&lt;p&gt;First of all, we need to understand what Computer Networking means. In a very abstract manner, we can consider Computer Networking as "the practice of interfacing two or more computing devices with each other for the purpose of sharing data." (Bradley Mitchell). This interaction can occur in different "flavors", like LANs or WANs, and also different designs, such as client-server and peer-to-peer. &lt;/p&gt;

&lt;p&gt;Computer Networking also has a standard basic model that can be used to better visualize and understand the theory behind it. This model is called OSI Model:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feiq51lb9mtuynx48gje0.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feiq51lb9mtuynx48gje0.jpeg" alt="OSI Model"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Journey across the Network
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7 - Application Layer
&lt;/h3&gt;

&lt;p&gt;This is the top layer, the one most end users see. It's the layer that receives input from and displays data to the end user. However, the application itself does not reside in the Application layer. This layer is just a platform to easily connect the information to the end-user by accepting communication requests inputted into the application, then wiring it down to lower layers. Web Browsers and FTP are good examples of Application Layer Communications.&lt;/p&gt;

&lt;h3&gt;
  
  
  6 - Presentation Layer
&lt;/h3&gt;

&lt;p&gt;The Presentation Layer is usually called the "Translation Layer", because it represents the preparation from Application Formatting to Networking Formatting, or vice-versa. The Presentation Layer is not as visual as the Application Layer (if at all!), but it's responsible to "display" and translate data for the Application or the Network. Good examples of Presentation Layer artifacts is the process of encryption, decryption, compression and transformation of data for a secure transmission.&lt;/p&gt;

&lt;h3&gt;
  
  
  5 - Session Layer
&lt;/h3&gt;

&lt;p&gt;If the Presentation Layer was the "translation layer", we can call the Session Layer a "Connection Layer". In order to maintain a "dialogue" between two computers, a session must be established. This layer is responsible not only for creating this bridge, but also to maintain, manage track and finish the conversation when required or needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  4 - Transport Layer
&lt;/h3&gt;

&lt;p&gt;The Transport Layer is the "Post-Office Layer" in the OSI Model. It coordinates all things related to data, like data transfers, how much data it will send, its transmission rate, where it is going, etc. Although they're not included in the OSI model, &lt;strong&gt;Transmission Control Protocols (TCP) and User Datagram Protocols (UDP) are categorized as Layer 4 Protocols&lt;/strong&gt;. The TCP is a connection-based  protocol, meaning that the connection between the two computers will be maintained for the whole duration of the request. It's also a &lt;strong&gt;patient connection&lt;/strong&gt;, because it allows the two computers to keep a reliable connection, in which all packets are ensured to be delivered to the right place. For the whole duration, the bridge between the two computers will stay stable while data is sent in an acceptable speed. Lost packets will be recovered and re-sent. The UDP protocol is a &lt;strong&gt;hasty connection&lt;/strong&gt;, meaning: If the computers can't keep up with its pace, it's their problems. Some usage examples are simple: If you need data accuracy over speed, choose TCP. If you need that all the packets are delivered (like in a video chat application), then speed must be prioritized over accuracy, and UDP seems to be a perfect selection.&lt;/p&gt;

&lt;h3&gt;
  
  
  3 - Network Layer
&lt;/h3&gt;

&lt;p&gt;The Network Layer is responsible for locating the destination of your requests, as well as forwarding packets to the said destination. This is the home of the IP addresses and Logical Addressing, and also it's the layer where the connection will find the best route to take in order to establish a connection. This layer also handles logical addressing If a packet is too large to be transmitted, it can be dismantled into several fragments which are shipped out and then reassembled on the other end.&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - Data Link Layer
&lt;/h3&gt;

&lt;p&gt;The Data Link Layer is where the node-to-node data transfer happens. It's also home for the MAC (Media Access Control) Address, and it's considered a physical layer. The Layer 2 is divided into two sub-layers: MAC, or Media Access Control, and LLC, or Logical Link Control. MAC addresses determines the way devices in a network will gain access to a medium and how they'll get permission to transmit data over the network. LLC identifies and encapsulates network layer protocols and controls error checking and frame synchronization. The MAC Address is also responsible for the physical address of the machine, &lt;strong&gt;checking if received packets are corrupted&lt;/strong&gt;, and also for formatting and preparing data that is about to be sent.&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Physical Layer
&lt;/h3&gt;

&lt;p&gt;The Physical Layer represents the tangible end of the system. The &lt;strong&gt;electrical parts&lt;/strong&gt; are included here, as well as layouts of pins, voltages, radio frequency links, and other &lt;strong&gt;physical requirements.&lt;/strong&gt; It's a media layer used to &lt;strong&gt;transmit and receive raw bits of data&lt;/strong&gt; (called segments) which it converts into all sorts of signals.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhchopaizxmpmwnpw6vq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhchopaizxmpmwnpw6vq.jpeg" alt="OSI Model over the wire"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which layer would you choose to send data over TCP or UDP?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The UDP and TCP protocols are handled by the &lt;strong&gt;Layer 4.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer checks received packets to make sure that they haven't been corrupted?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One of the responsibilities of &lt;strong&gt;Layer 2&lt;/strong&gt; is to provide a physical address for the machine, format and prepare data and confirm if it the packets aren't corrupted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In which layer would data be formatted in preparation for transmission?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As it was already mentioned in the question above, one of the responsibilities of &lt;strong&gt;Layer 2&lt;/strong&gt; is to provide a physical address for the machine, format and prepare data and confirm if it the packets aren't corrupted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer transmits and receives data?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One of the responsibilities of the &lt;strong&gt;Layer 1&lt;/strong&gt; is to transmit and receive data segments and convert them into signals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer encrypts, compresses, or otherwise transforms the initial data to give it a standardized format?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The process of encryption, decryption, compression and transformation of data for a secure transmission is a responsibility of the &lt;strong&gt;Layer 6&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer tracks communications between the host and receiving computers?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Layer 5&lt;/strong&gt; is responsible not only for creating this bridge, but also to maintain, manage track and finish the conversation when required or needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer accepts communication requests from applications?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Layer 7&lt;/strong&gt; connects the information to the end-user by accepting communication requests inputted into the application, then wiring it down to lower layers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer handles logical addressing?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Layer 3&lt;/strong&gt; is the home of the IP addresses and Logical Addressing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When sending data over TCP, what would you call the "bite-sized" pieces of data?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bite-sized pieces of data are called &lt;strong&gt;Segments&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer would the FTP protocol communicate with?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web Browsers and FTP are good examples of &lt;strong&gt;Layer 7&lt;/strong&gt; Communications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which transport layer protocol would be best suited to transmit a live video?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you need that all the packets are delivered (like in a video chat application), then speed must be prioritized over accuracy, and &lt;strong&gt;UDP&lt;/strong&gt; seems to be a perfect selection.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Encapsulation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Whenever Data is passed down the multiple layers of the OSI Model, it gets encapsulated. It means that information about each of the layers is added to the data as a header, with information that is considered important to the next layer to evaluate. In the Data Link Layer, it also adds a trailer at the end of the data, which is used to confirm if that data was corrupted or not during its journey. During this journey, data's name can vary, being considered, for example, a &lt;strong&gt;Segment&lt;/strong&gt; or &lt;strong&gt;Datagram&lt;/strong&gt; while in the Transport Layer, and &lt;strong&gt;Frames&lt;/strong&gt; while in the Data Link Layer. Once the data reaches its destination, the de-capsulation process begins, and the same steps are taken but in reverse order. You might ask why this whole process occurs, and the answer is simple. Headers added during the encapsulation process help not only managing critical information for the data to be send correctly to its destination, but it also adds an extra layer of &lt;strong&gt;security&lt;/strong&gt; and &lt;strong&gt;reliability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskah3wm4btxysk7nurjc.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fskah3wm4btxysk7nurjc.jpeg" alt="Data Encapsulation Process"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  TCP/IP Model
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mpeor9sk7va4byzxbui.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mpeor9sk7va4byzxbui.jpeg" alt="TCP/IP Model"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As mentioned by MuirlandOracle on his TryHackMe's box, "it's important to understand exactly why the TCP/IP and OSI models were originally created. To begin with there was no standardisation -- different manufacturers followed their own methodologies, and consequently systems made by different manufacturers were completely incompatible when it came to networking. The TCP/IP model was introduced by the American DoD in 1982 to provide a standard -- something for all of the different manufacturers to follow. This sorted out the inconsistency problems. Later the OSI model was also introduced by the International Organisation for Standardisation (ISO); however, it's mainly used as a more comprehensive guide for learning, as the TCP/IP model is still the standard upon which modern networking is based."&lt;/p&gt;

&lt;p&gt;It's also important to understand that the TCP/IP is a &lt;strong&gt;Connection-Oriented Protocol (&lt;/strong&gt;Or Connection-Based Protocol*&lt;em&gt;)&lt;/em&gt;*. According to the Oracle documentation, "it requires a logical connection to be established between the two processes before data is exchanged. The connection must be maintained during the entire time that communication is taking place, then released afterwards. The process is much like a telephone call, where a virtual circuit is established--the caller must know the person's telephone number and the phone must be answered--before the message can be delivered."&lt;/p&gt;

&lt;p&gt;The whole communication in the TCP/IP Model works with a SYN/ACK connection, or a &lt;strong&gt;three-way handshake.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;You might be asking: &lt;em&gt;Okay, but how does this work?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It's quite simple! In a &lt;strong&gt;three-way handshake,&lt;/strong&gt; the first computer sends a request to a second computer, indicating that it want to start a connection, to &lt;strong&gt;SYN&lt;/strong&gt;chronize with it. The second computer then responds with a packet containing the &lt;strong&gt;SYN&lt;/strong&gt;chronize information sent by the first computer, as well as an extra packet &lt;strong&gt;ACK&lt;/strong&gt;nowledging the request to start a connection. Finally, the first computer will send over a final packet, containing only the &lt;strong&gt;ACK&lt;/strong&gt;nowledgment that the conversation between those 2 computers can start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsidcnt1wu2qltt4164iw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsidcnt1wu2qltt4164iw.jpeg" alt="SYN/ACK"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which model was introduced first, OSI or TCP/IP?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first model to be introduced was the &lt;strong&gt;TCP/IP Model&lt;/strong&gt;, in 1982. The OSI Model was introduced two years later, in 1984&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer of the TCP/IP model covers the functionality of the Transport layer of the OSI model (Full Name)?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As we could see in our graph, the Transport Layer of the OSI Model has its functionalities covered by the &lt;strong&gt;Transport&lt;/strong&gt; Layer from the TCP/IP Model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer of the TCP/IP model covers the functionality of the Session layer of the OSI model (Full Name)?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As we could see in our graph, the Session Layer of the OSI Model has its functionalities covered by the &lt;strong&gt;Application&lt;/strong&gt; Layer from the TCP/IP Model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Network Interface layer of the TCP/IP model covers the functionality of two layers in the OSI model. These layers are Data Link, and?.. (Full Name)?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As we could see in our graph, the Network Interface represents the funcionalities from the Data Link and the &lt;strong&gt;Physical&lt;/strong&gt; Layer from the the OSI Model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer of the TCP/IP model handles the functionality of the OSI network layer?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As we could see in our graph, the Network Layer of the OSI Model has its functionalities covered by the &lt;strong&gt;Internet&lt;/strong&gt; Layer from the TCP/IP Model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What kind of protocol is TCP?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;According to the Oracle Documentation, the TCP/IP Model is a &lt;strong&gt;Connection-Based&lt;/strong&gt; protocol.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What is SYN short for?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Synchronize&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What is the second step of the three way handshake?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SYN/ACK&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What is the short name for the "Acknowledgement" segment in the three-way handshake?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ACK&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Moving on to our first tool in this write-up, we open the .pcap file as suggested in the TryHackMe's room - &lt;a href="https://tryhackme.com/room/introtonetworking" rel="noopener noreferrer"&gt;https://tryhackme.com/room/introtonetworking&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once we open the file on WireShark and analyze the packets, we get the following information:&lt;/p&gt;

&lt;p&gt;1 - For the first packet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkjbtg0qfg6ubbg444e7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkjbtg0qfg6ubbg444e7.png" alt="Wireshark first packet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 - For the second packet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcdyl7dttlg3q5bvnocl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkcdyl7dttlg3q5bvnocl.png" alt="Wireshark second packet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Going for the second packet, as suggested, we can start to answer the questions&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the protocol specified in the section of the request that's linked to the Application layer of the OSI and TCP/IP Models?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Domain Name System&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Which layer of the OSI model does the section that shows the IP address "172.16.16.77" link to (Name of the layer)?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3yo4q4yuubgawjnudaf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3yo4q4yuubgawjnudaf3.png" alt="Wireshark Network"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;In the section of the request that links to the Transport layer of the OSI and TCP/IP models, which protocol is specified?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wireshark displays the usage of User Datagram Protocol&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq41ro541t3yj47yi1j3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq41ro541t3yj47yi1j3z.png" alt="UDP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Over what medium has this request been made (linked to the Data Link layer of the OSI model)?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Ethernet II&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81cyug7hm7j8vkjalgu6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81cyug7hm7j8vkjalgu6.png" alt="EthernetII"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Which layer of the OSI model does the section that shows the number of bytes transferred (81) link to?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Frame 2 section links to the &lt;strong&gt;Physical Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxsjdq3zh997nyrdg3f7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpxsjdq3zh997nyrdg3f7.png" alt="Link to Physical Layer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[Research] Can you figure out what kind of address is shown in the layer linked to the Data Link layer of the OSI model?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;According with the Pearson IT Certification, "a MAC address is a unique 6-byte address that is burned into each network interface or more specifically, directly into the PROM chip on the NIC. The number must be unique, as the MAC address is the basis by which almost all network communication takes place. No matter which networking protocol is being used, the MAC address is still the means by which the network interface is identified on the network. Notice that I say network interface. That’s very important, as a system that has more than one network card in it will have more than one MAC address.". That being said, we can attest that the address shown is a valid &lt;strong&gt;MAC&lt;/strong&gt; address&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsb86n53ecm5udcchyjci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsb86n53ecm5udcchyjci.png" alt="MAC Address"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Once the theory is past us, now it's time to move on to some practical applications on the network studies by using some useful tools to get a better understanding on those networks.&lt;/p&gt;

&lt;h1&gt;
  
  
  Networking Tools - Ping
&lt;/h1&gt;

&lt;p&gt;For starters, let's take a look on &lt;strong&gt;Ping.&lt;/strong&gt; This tool is used to test the connection between your machine and a remote target, either a web application or just another machine. By typing &lt;code&gt;ping -h&lt;/code&gt; we are able to see on our Kali terminal all the options related to this tool, making it easier for us to plan and implement this usage during our daily tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yp8zz9x9fajae2kcwbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9yp8zz9x9fajae2kcwbw.png" alt="Ping Help"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a more detailed explanation and a deep dive into the documentation, you can also type &lt;code&gt;man ping&lt;/code&gt; to access its manual, which we are going to do in order to answer the following questions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What command would you use to ping the &lt;a href="http://bbc.co.uk/" rel="noopener noreferrer"&gt;bbc.co.uk&lt;/a&gt; website?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For pinging any website, you simply need to write &lt;code&gt;ping&lt;/code&gt; + &lt;code&gt;website's URL/website's IP&lt;/code&gt;. So, in this case, the answer is simply &lt;strong&gt;ping bbc.co.uk&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ping &lt;a href="http://muirlandoracle.co.uk/" rel="noopener noreferrer"&gt;muirlandoracle.co.uk&lt;/a&gt;. What is the IPv4 address?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By using &lt;code&gt;ping [muirlandoracle.co.uk](http://muirlandoracle.co.uk)&lt;/code&gt; we can test a connection with the said website, and we can also find out what the IPv4 address for this website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoaj26jsb0v3oq7bjj4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsoaj26jsb0v3oq7bjj4d.png" alt="Ping Website"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What switch lets you change the interval of sent ping requests?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9w8eok9smpqrn0fksn7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9w8eok9smpqrn0fksn7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What switch would allow you to restrict requests to IPv4?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1yln94mud6d90604uk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1yln94mud6d90604uk6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What switch would give you a more verbose output&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7zpsqnql1oiesj3pc43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7zpsqnql1oiesj3pc43.png" alt="Verbose"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Networking Tools - Traceroute
&lt;/h1&gt;

&lt;p&gt;Tracerout is also a really useful tool for you, since it's capable of follow the packets through your connection to the desired endpoint. If it's not installed by default on your Kali Linux, simply run &lt;code&gt;apt-get install traceroute&lt;/code&gt; to download it. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What switch would you use to specify an interface when using Traceroute?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hsqhmugunw23wfk9iip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hsqhmugunw23wfk9iip.png" alt="Interface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What switch would you use if you wanted to use TCP SYN requests when tracing the route?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5dw05nk0vga3x9cu7nu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5dw05nk0vga3x9cu7nu.png" alt="Traceroute TCP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[Lateral Thinking] Which layer of the TCP/IP model will traceroute run on by default (Windows)?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We know that by default, the Windows traceroute utility (tracert) operates using the same ICMP protocol that ping utilises, which is the &lt;strong&gt;Internet&lt;/strong&gt; layer in the TCP/IP Model&lt;/p&gt;




&lt;h1&gt;
  
  
  Networking Tools - WHOIS
&lt;/h1&gt;

&lt;p&gt;Most internet traffic occurs using DNS, the Domain Name System, which allows us to access Google by simply typing &lt;a href="http://google.com" rel="noopener noreferrer"&gt;google.com&lt;/a&gt; in our browsers, instead of some nasty and complicated four octet's IP address. That being said, &lt;strong&gt;whois&lt;/strong&gt; is a tool that can help us retrieve more informaton on websites we know only about its Domain Name. So, for example, if we want to get more information on Google, we simply type &lt;code&gt;whois google.com&lt;/code&gt; and we are presented with a whole lot of information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ful75o99al780gfft6npw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ful75o99al780gfft6npw.png" alt="Whois"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Perform a whois search on &lt;a href="http://facebook.com/" rel="noopener noreferrer"&gt;facebook.com&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4jei3x3ij6f5owzj9p9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4jei3x3ij6f5owzj9p9.png" alt="Whois Facebook"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What is the registrant postal code for &lt;a href="http://facebook.com/" rel="noopener noreferrer"&gt;facebook.com&lt;/a&gt;?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefilrwc2ijqscz0npg5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefilrwc2ijqscz0npg5g.png" alt="Postal Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;When was the &lt;a href="http://facebook.com/" rel="noopener noreferrer"&gt;facebook.com&lt;/a&gt; domain first registered?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzp5700zhti3vnrht6bhj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzp5700zhti3vnrht6bhj.png" alt="Date"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Perform a whois search on &lt;a href="http://microsoft.com/" rel="noopener noreferrer"&gt;microsoft.com&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz964h5ceu8x31bcn3z2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz964h5ceu8x31bcn3z2c.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Which city is the registrant based in?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vysf7rmhffxg2fadgns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vysf7rmhffxg2fadgns.png" alt="City"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[OSINT] What is the name of the golf course that is near the registrant address for &lt;a href="http://microsoft.com/" rel="noopener noreferrer"&gt;microsoft.com&lt;/a&gt;?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To start this OSINT procedure, we need to know Microsoft's registrant address. By analyzing the information retrieved from our &lt;code&gt;whois&lt;/code&gt; search, we are able to see the address is One Microsoft Way, Redmond, WA 98052. By typing it on Google Maps and zooming out a bit, we can see that Microsoft headquarter's are quite close to the &lt;strong&gt;Bellevue Golf Course.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbre65tgcigbxhrneqsch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbre65tgcigbxhrneqsch.png" alt="OSINT Golf Course"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What is the registered Tech Email for &lt;a href="http://microsoft.com/" rel="noopener noreferrer"&gt;microsoft.com&lt;/a&gt;?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xm1ivj8n7jrtgkb2fph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8xm1ivj8n7jrtgkb2fph.png" alt="Tech E-mail"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Networking Tools - Dig
&lt;/h1&gt;

&lt;p&gt;Dig, a fantastic tool for troubleshooting networks, can provide a lot of information about the DNS servers related to a domain. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What is DNS short for?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DNS stands for &lt;strong&gt;Domain Name System,&lt;/strong&gt; which provides a name to an IP address number. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the first type of DNS server your computer would query when you search for a domain?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recursive.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What type of DNS server contains records specific to domain extensions (i.e. .com, .co.uk*, etc)*? Use the long version of the name.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a &lt;strong&gt;Top-Level Domain,&lt;/strong&gt; the part of the domain that comes after the dot. It's divided into two categories, gTLD (generic top-level domain) and ccTLD (country-code top-level domain). &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Where is the very first place your computer would look to find the IP address of a domain?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Local Cache&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[Research] Google runs two public DNS servers. One of them can be queried with the IP 8.8.8.8, what is the IP address of the other one?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8y5pzijfprne5rb8dxg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8y5pzijfprne5rb8dxg.png" alt="Google DNS Server"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;If a DNS query has a TTL of 24 hours, what number would the dig query show?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Considering that dig shows timestamps based in seconds, we simply need to 60 * 60 * 24 (The seconds in a day) to get the result of &lt;strong&gt;86400&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Bibliography
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.lifewire.com/what-is-computer-networking-816249" rel="noopener noreferrer"&gt;https://www.lifewire.com/what-is-computer-networking-816249&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.networkworld.com/article/3239677/the-osi-model-explained-and-how-to-easily-remember-its-7-layers.html" rel="noopener noreferrer"&gt;https://www.networkworld.com/article/3239677/the-osi-model-explained-and-how-to-easily-remember-its-7-layers.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.extrahop.com/company/blog/2019/the-osi-model-explained/" rel="noopener noreferrer"&gt;https://www.extrahop.com/company/blog/2019/the-osi-model-explained/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tryhackme.com/room/introtonetworking" rel="noopener noreferrer"&gt;https://tryhackme.com/room/introtonetworking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://afteracademy.com/blog/what-is-data-encapsulation-and-de-encapsulation-in-networking" rel="noopener noreferrer"&gt;https://afteracademy.com/blog/what-is-data-encapsulation-and-de-encapsulation-in-networking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oracle.com/cd/E19620-01/805-4041/6j3r8iu2f/index.html" rel="noopener noreferrer"&gt;https://docs.oracle.com/cd/E19620-01/805-4041/6j3r8iu2f/index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pearsonitcertification.com/articles/article.aspx?p=398088&amp;amp;seqNum=14" rel="noopener noreferrer"&gt;https://www.pearsonitcertification.com/articles/article.aspx?p=398088&amp;amp;seqNum=14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.steves-internet-guide.com/dns-guide-beginners/" rel="noopener noreferrer"&gt;http://www.steves-internet-guide.com/dns-guide-beginners/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.one.com/hc/en-us/articles/115005587509-What-is-a-top-level-domain-" rel="noopener noreferrer"&gt;https://help.one.com/hc/en-us/articles/115005587509-What-is-a-top-level-domain-&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/speed/public-dns/docs/using" rel="noopener noreferrer"&gt;https://developers.google.com/speed/public-dns/docs/using&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Resources to get you started in Cybersecurity (for free).</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Mon, 22 Feb 2021 15:28:19 +0000</pubDate>
      <link>https://dev.to/arturserra/resources-to-get-you-started-in-cybersecurity-for-free-327o</link>
      <guid>https://dev.to/arturserra/resources-to-get-you-started-in-cybersecurity-for-free-327o</guid>
      <description>&lt;h3&gt;
  
  
  Cybersecurity &lt;strong&gt;is&lt;/strong&gt; an overwhelming subject. There are hundreds of paths one can take in order to get to one of the various jobs in the area. Pentester, DevSecOps Engineer, Blue Team Specialist are just some of the titles in the Cybersecurity microcosmos, and sometimes it can be really difficult to find the right way into it. This post isn't suppose to write the Ultimate Truth about CyberSec, but rather evaluate my experience breaking the first waves into this really gigantic ocean, and maybe serve as one of many other guidelines a prospect professional in this field should research and consider before making their own choices.
&lt;/h3&gt;

&lt;p&gt;First, let's take a look into the technical or hard skills. These are the techniques and knowledge you gotta learn to stand out in most situations. I like to think that one should always be prepared for the opportunities that might appear, and getting proper knowledge and certifications in these three particular subjects is how you gonna build a strong foundation in Cybersecurity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3ms4hp56o3bcviezuw5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3ms4hp56o3bcviezuw5.jpeg" alt="Linux, Network and Offensive Security"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But something important to note is that hard skills can be learned at any time. Better than that, it's really good to develop your own soft skills! These are not as common to see in the regular script kid, but they are outstandingly necessary nevertheless. So it's good to learn how to clearly communicate your ideas, how to deal and lead people and how to be ready to develop and evolve everyday.&lt;/p&gt;

&lt;h3&gt;
  
  
  Okay, but how do I get started with all of this?
&lt;/h3&gt;

&lt;p&gt;Right, right. Without further ado, let's jump into practical stuff here.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Over The Wire&lt;/strong&gt;. This cyber wargame is the perfect starting point to get your feet wet and get a gist of the cybersecurity environment. Their most basic room, Bandit, is what you need to get some hands-on experience. And even though one of the most important skills a cybersecurity professional (and any cybersecurity professional, to be honest) could have is Googling your way around any trouble, I'll also add one of the many fantastic resources provided by John Hammond in this link &lt;a href="https://www.youtube.com/watch?v=PRAjBlys-7g&amp;amp;list=PL1H1sBF1VAKUsYdQd94dO9MgSaY2p1AJ4" rel="noopener noreferrer"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;, where he explains everything you need to know in a really well-crafted walkthrough.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Linux System Administration&lt;/strong&gt;. Knowing your work around Linux is an awesome way to troubleshoot problems in servers and cloud computing services, since most of them are Linux based. It's also good to leverage information while attacking a machine in a penetration test assessment. So going through this complete course on &lt;a href="https://www.youtube.com/watch?v=wsh64rjnRas" rel="noopener noreferrer"&gt;&lt;strong&gt;Geek's Lesson Youtube Channel&lt;/strong&gt;&lt;/a&gt; is a nice way to start understanding how Linux works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Offensive Security&lt;/strong&gt;. Knowing how to run (or build) a network mapping tool, as well as understanding how to gather information and exploit a vulnerability you found are a must in a Cybersecurity technical role. Even if you're not aligned with the Red Team premises in your company, you better understand how the adversaries work, in order to better prepare your defenses or better design and develop your applications before releasing them into production. For that, this &lt;a href="https://www.youtube.com/watch?v=3Kq1MIfTWCE" rel="noopener noreferrer"&gt;&lt;strong&gt;complete course&lt;/strong&gt;&lt;/a&gt; from Heath Adams is all you need to get a practical way around hacking situations. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;INE Cybersecurity Learning Paths&lt;/strong&gt;. After acquiring the right to be the official training platform for eLearnSecurity's courses, &lt;a href="https://my.ine.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;INE&lt;/strong&gt;&lt;/a&gt; became a mandatory stop in a prospect cybersecurity professional. PTS (Penetration Test Student, one of their learning paths) is the official course for one of the most prestigious entry-level penetration test certificates out there, the &lt;strong&gt;eJPT&lt;/strong&gt;. And the best thing is: It's for free, meaning you only have to pay (as of now) $200 for the exam voucher, while all the learning costs absolutely nothing! That's a really good move for beginners, and considering how important certifications are in this field, no matter what career path you take, this is also an awesome kickstart for you!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Some additional resources.
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;FreeCodeCamp&lt;/strong&gt;. With a free 300 hours curriculum focused on Cybersecurity (and some other 300 hours curriculums for various different subjects as well), FreeCodeCamp can provide you extra materials for you to start developing your own tools and applying some processes to better secure networks and applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;. Github is well-known as a code repository and a geek paradise, but you can also find hundreds of repos with new tools, techniques and more resources for you to keep always developing your career and learning more every day. Some of my favorite Cybersecurity-related github repos are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/fabionoth/awesome-cyber-security" rel="noopener noreferrer"&gt;https://github.com/fabionoth/awesome-cyber-security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/EONRaider/blackhat-python3" rel="noopener noreferrer"&gt;https://github.com/EONRaider/blackhat-python3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sbilly/awesome-security" rel="noopener noreferrer"&gt;https://github.com/sbilly/awesome-security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/harisqazi1/Cybersecurity" rel="noopener noreferrer"&gt;https://github.com/harisqazi1/Cybersecurity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/swisskyrepo/PayloadsAllTheThings" rel="noopener noreferrer"&gt;https://github.com/swisskyrepo/PayloadsAllTheThings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DavidLapadula/Python-automate-cybersecurity" rel="noopener noreferrer"&gt;https://github.com/DavidLapadula/Python-automate-cybersecurity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-pentest" rel="noopener noreferrer"&gt;https://github.com/enaqx/awesome-pentest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TryHackMe&lt;/strong&gt;. In my humble opinion, the best learning resources for beginners. Just subscribe &lt;a href="https://tryhackme.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;there&lt;/strong&gt;&lt;/a&gt; and search for rooms and start hacking. Learn a lot from them, and if you wanna get a better perspective of what you're learning, you can subscribe to their platform and follow some learning paths, focused on both Offensive and Defensive techniques and situations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bug Bounty Hunting&lt;/strong&gt;. Once you get all your basics done, it's time to put them into practice. But before you get a job, you can legally hack into companies that have a Bug Bounty Program. The path to find a bug is not easy, but you shouldn't go there for the financial reward of it. Take it as a learning experience, where you can probably find some bugs and earn some money in the process. This way you're going to practice your skills in real-world applications, and get a better glimpse on how things are done in the wild. For that, you can register to a bug bounty platform of your choice (like HackerOne or Intigrity), sign up to a program that you found interesting and start hacking! To help you in this journey, I can't recommend enough Katie from InsiderPhD, and her &lt;a href="https://www.youtube.com/watch?v=_y-iz3itch0" rel="noopener noreferrer"&gt;&lt;strong&gt;videos&lt;/strong&gt;&lt;/a&gt; must be one of the better resources for beginner's out there.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgthu7w3qmhb8a1uguuh4.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgthu7w3qmhb8a1uguuh4.jpeg" alt="Suggested Cybersecurity Learning Path"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>python</category>
      <category>beginners</category>
      <category>bash</category>
    </item>
    <item>
      <title>TryHackMe - ToolsRUs WriteUp</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Thu, 04 Feb 2021 15:25:19 +0000</pubDate>
      <link>https://dev.to/arturserra/tryhackme-toolsrus-writeup-10da</link>
      <guid>https://dev.to/arturserra/tryhackme-toolsrus-writeup-10da</guid>
      <description>&lt;p&gt;"&lt;em&gt;Your challenge is to use the tools listed below to enumerate a server, gathering information along the way that will eventually lead to you taking over the machine&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This task requires you to use the following tools:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Dirbuster&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Hydra&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nmap&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Nikto&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Metasploit&lt;/em&gt;"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective from this TryHackMe's room are explicit from the very beginning. We gotta learn how to use some core tools present in the current hacking environment, essential to push forward our methodologies in an easy, (usually) fast and automatic way. So let's start to check this room out and see if we can cover all tasks and answer all questions proposed here.&lt;/p&gt;

&lt;p&gt;To start our Information Gathering phase, we run RustScan with &lt;code&gt;docker run -it --rm --name rustscan rustscan/rustscan:1.1.0 10.10.64.71&lt;/code&gt; in order to quickly find out more information about the open ports.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp5k6ow5jvkn6c7vwr2ja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp5k6ow5jvkn6c7vwr2ja.png" alt="RustScan"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once we know which ports are open, we run a really intense nmap focusing only on those ports, with the command &lt;code&gt;nmap -T4 -A -Pn -O -v -p 22,1234,80 10.10.64.71&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgyj5zeyr9nfwkkq5pf71.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgyj5zeyr9nfwkkq5pf71.png" alt="Nmap Scan"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We get to find a lot of important information with the scan, especially that it's running two web clients, one on port 80 and another one on port 1234. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F73a59q96lm6g05lmbkkr.png" alt="Port 80 Open"&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwuiper6ldqaaf0hw76g8.png" alt="Port 1234 Open"&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Since the one running on port 1234 seems to be just the default page from Apache Tomcat, let's focus on getting some more information on the "main" web client, the one running on port 80.&lt;/p&gt;

&lt;p&gt;To start up our investigation, let's focus on the hero image on the page. It indicates that, even though the main page is down, there might be some secret directories. A common practice is to check the &lt;strong&gt;robots.txt&lt;/strong&gt; file in order to find some hidden gems in a website.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyzbt1ohceee36qbga0pc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyzbt1ohceee36qbga0pc.png" alt="Not Functional landing page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, accessing the /robots.txt returns a default 404. Not an optimal result, but default 404 are good pieces to disclose information on what kind of web server the application is running on. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq870ba9kkmtovnxhmil1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq870ba9kkmtovnxhmil1.png" alt="Default Apache 404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We then run a gobuster with the command&lt;br&gt;
&lt;code&gt;gobuster dir -u http://10.10.64.71/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -t 40 -x .php,.txt,.bak,.html 2&amp;gt;/dev/null&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will not only look for directories in our wordlist, but also for extra file extensions such as &lt;strong&gt;php&lt;/strong&gt;, &lt;strong&gt;txt&lt;/strong&gt;, &lt;strong&gt;bak&lt;/strong&gt; and &lt;strong&gt;html&lt;/strong&gt;. This is important to find hidden login screens, backup files, development files and other kind of important information we can gather in this process, which is crucial to expand our attack surface.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyraycpmjizjsq2edapw8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyraycpmjizjsq2edapw8.png" alt="Gobuster Scan"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our gobuster scan returns some hidden directories, including the answer for the first question in this room: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Our gobuster scan returns some hidden directories, including the answer for the first question in this room&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;guidelines&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Accessing /guidelines, we get a message, a "developer leftover". &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg8n5fvccfzgmn2ryx8t4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg8n5fvccfzgmn2ryx8t4.png" alt="Developer Leftover"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Whose name can you find from this directory?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bob&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's some valuable information, we might tackle it later. &lt;br&gt;
Moving on with our discovery, we also found out about this other &lt;strong&gt;protected&lt;/strong&gt; directory.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxncxh7ouvuanxhmg3b0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxncxh7ouvuanxhmg3b0i.png" alt="Protected Directory"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This basic authentication is also the answer for the next question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What directory has basic authentication?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;protected&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;We know one of the developers is called "bob", so probably this is also a username. In order to find out about their password, we can run &lt;strong&gt;Hydra&lt;/strong&gt; with the command:&lt;br&gt;
&lt;code&gt;hydra -l bob -P /usr/share/wordlists/rockyou.txt -t 1 -f 10.10.64.71 http-get /protected/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After just a few seconds, we get a matching result, and also the answer for the fourth question in our room.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What is bob's password to the protected part of the website?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bubbles&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fn62ub6e8goebfkgrq8tv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fn62ub6e8goebfkgrq8tv.png" alt="Hydra BruteForcing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we try to log into the basic authentication, however, we find this new message, probably pointing to the other open port we found out before&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Feamzw7w4cwjy9iyutgef.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Feamzw7w4cwjy9iyutgef.png" alt="Rabbit Hole"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next questions refer to something we found out about earlier in our Information Gathering phase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What other port that serves a webs service is open on the machine?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1234&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Going to the service running on that port, what is the name and version of the software?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache Tomcat/7.0.88&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Running a Nikto scan with &lt;code&gt;nikto -h http://10.10.64.71:1234&lt;/code&gt;, we get to retrieve more useful information.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg874kjd9wghyxy2194vt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg874kjd9wghyxy2194vt.png" alt="Nikto Scan"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How many documentation files did Nikto identify?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Going back to our default 404, we can get information on how to answer the following question&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What is the server version (run the scan against port 80)?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache/2.4.18&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, accessing the http://:1234/manager/html and logging in with bob's credentials, we get to this admin page&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0nmdov7o5qb68x453mv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0nmdov7o5qb68x453mv2.png" alt="Apache Admin"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On our nikto scan we could also get information on the Apache-Coyote, answering the next question.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What version of Apache-Coyote is this service using?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1.1&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Considering we are dealing with a Tomcat Manager, let's look for it on searchsploit, with a simple &lt;code&gt;searchsploit tomcat manager&lt;/code&gt; command&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftzc50myv1t37rii4h0iz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftzc50myv1t37rii4h0iz.png" alt="Searchsploit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With all the information we gathered during this process, we are able to try to exploit the application. The first tool we are going for here is Metasploit, for two reasons: The first one is that it's a very good and versatile application, the second is reason is: With our searchsploit, we managed to find that the exploit in our system for this particular application is a .rb file, and considering that Metasploit is a Ruby-based application, most likely it's a Metasploit-ready exploit.&lt;/p&gt;

&lt;p&gt;Diving deeper into our metasploit, we manage to find that exploit we found before on searchsploit. With that, we can set the RHOSTS to  and the RPORT to 1234, as well as the HttpPassword to bubbles and HttpUsername to bob.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frk9wsx2fmlkf4274xd0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frk9wsx2fmlkf4274xd0y.png" alt="Metasploit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;set RPORT 1234&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;set RHOSTS &amp;lt;IP&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;set HttpPassword bubbles&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;set HttpUsername bob&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;set LHOST &amp;lt;VPN IP&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz9xl3wto39by4cd6zt88.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz9xl3wto39by4cd6zt88.png" alt="Metasploit settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(If you don't want to exploit it using metasploit, there are some alternatives &lt;a href="https://www.hackingarticles.in/multiple-ways-to-exploit-tomcat-manager" rel="noopener noreferrer"&gt;here&lt;/a&gt;):&lt;/p&gt;

&lt;p&gt;Once everything is configured we can simply run the exploit with the command &lt;code&gt;run&lt;/code&gt; (or &lt;code&gt;exploit&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2di1i3tbaailw0h47yw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2di1i3tbaailw0h47yw9.png" alt="Metasploit Shell"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then we have a shell! Running a &lt;code&gt;getuid&lt;/code&gt; command, we manage to know we are running it as root! Awesome!&lt;br&gt;
After exploring to the root folder, we manage to find the flag and read it! &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftb9prft1n9457nz2tqpa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftb9prft1n9457nz2tqpa.png" alt="Flag!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's it! We managed to root the ToolsRUs machine, a quite useful way to learn about the various tools and techniques used to exploit an application! Kudos to TryHackMe for creating such a cool room for us to practice and sharpen our skills!&lt;/p&gt;

&lt;p&gt;Some takeaways one can take from this particular room is the importance of a good information gathering phase. Most of the tools it highlights are related to this phase, that is - arguably - the most important step in the Pentest methodology. It's also good to have a nice plan B. As I also suggested, going for an alternative exploit that does not entirely depends on Metasploit is a good plan b, because sometimes meterpreter breaks or fails (or you just forgot to configure one of the important fields [like myself, not updating LHOSTS and hitting my face against the wall multiple times]).&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>hacking</category>
      <category>tryhackme</category>
      <category>metasploit</category>
    </item>
    <item>
      <title>The Power of DAOs</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Mon, 27 Jul 2020 18:17:15 +0000</pubDate>
      <link>https://dev.to/arturserra/the-power-of-daos-26f2</link>
      <guid>https://dev.to/arturserra/the-power-of-daos-26f2</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Imagine a new way of doing business inside an organization, with computers and code implementing the rules instead of managers, in a fully decentralized way and using the tech advantages of blockchain like less costs and way more speed to implement governance. That's what DAOs are able to do, but the best way to understand them is to first understand what each word in "Decentralized Autonomous Organization" means.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's start with &lt;strong&gt;"Organization"&lt;/strong&gt;. Traditional organizations are a collective of people willing to do something together in order to fulfill a common goal. It can be a non-profit focused on charity, it can be a company willing to revolutionize the market... when a group of people gather under a banner in order to pursue an objective, it can be called an organization. There is a caveat here: In DAOs, and in blockchain technology in general, there are no differences between people and machine: This equality is brought by the smart contracts, the code that provides the rules inside a DAO: if you are able to reach the requirements in the code, you can participate in the whole governance model provided by the DAO. &lt;br&gt;
Then we have &lt;strong&gt;"Autonomous"&lt;/strong&gt;. As we just saw in the last paragraph, all the rules in a DAO are provided by the smart contracts. Those pieces of code are self-executing, which makes the organization self-governed as well. Once the rules are written, it will have its requirements. Any time an user - it might be a person or a machine - fulfills those requirements, the code will move to the next step, as it was originally programmed for. If it's not in the code, it doesn't exists. This is also the core of all the DAO's advantages and disadvantages, as we'll discuss in a bit more detail later.&lt;br&gt;
And, finally, we have &lt;strong&gt;"Decentralized"&lt;/strong&gt;. The whole code that rules the organization is distributed. It doesn't falls under the hood of a single entity, it's not governed by any singular authority or government, it doesn't have a single physical address. This model, backed up by the blockchain technology, is one of DAO's most important features: It allows the organization to be global from the very first moment, and it allows members from all over the world, with no discrimination whatsoever, to have a voice in the decisions.&lt;br&gt;
The world created by the existence of DAOs is fully based on innovation. First of, it leads to a new monetary paradigm, with decentralized, fully autonomous and trustworthy banks and governance models. It also creates a whole new model of products, that are built on top of blockchains and smart contracts, with their own tokens and cryptocurrencies, with their agent's identity protected by cryptography. Considering the currenct paradigm, with data theft and the abdication of all privacy we might have online, this new model leads to a safer way to conduct businesses, commerce and governance, in a private yet transparent and inclusive way. &lt;/p&gt;

&lt;h1&gt;
  
  
  DAO's advantages...
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;As already mentioned before, DAOs are an innovative and open model of creating organizations, which is by itself a really good reason to implement them. But let's take a deeper dive into the details of what makes the DAOs so powerful.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The governance tokens given to the members are a way to control the governance inside the DAO. Let's work with an example here: A member of the DAO submits a proposal for voting. Each member who holds a token will get the right to vote according to the number of tokens they have (it can vary depending on the cases), but each vote will have its anonimity and privacy assured. This way, the members are free to democratically vote to the proposals, which decisions will be protected by the smart contracts. No bribery or corruption can take place in such scenario, and even under-pressure blackmail will be avoided. With no central power, it's impossible to influence the governance inside the organization without influencing the majority of its members. &lt;br&gt;
Smart contracts, the leading force behind the curtains, store the rules and processes in code. This automated way is safer than leaving all the management to people. Let's say a company wants to cover an employee's travel expenses. A contract can be created to deliver the money to that employee, instantly. The whole transaction is transparent and auditable, which means it's really easy for everyone to just check how much money was taken from that contract. Even salaries can be paid in this automated way, and a job position that offers X dollars/month will deliver that amount in a indiscriminated way, agnostic to beliefs, race or gender. The equality, transparency and precision that smart contracts bring into the DAO's game is unique, and the praise they get is justified.&lt;br&gt;
This openness and transparency can be observed in the whole structure of a DAO. When multiple parts have no previous reason to trust each other - or when they even don't know each other - the smart contracts ensure a way to coordinate resources in a trustworthy and auditable way. Governance inside a DAO is geography agnostic and censorship-resistant, meaning one can vote for the proposals wherever they are, in a platform that isn't easily censored as some apps and websites that rely on a single IP address. It also rewards contribution, meaning that one can be rewarded once the DAO succeeds, and the more money it gets, the more the contributor will profit from the early-stage investments they made. &lt;/p&gt;

&lt;h1&gt;
  
  
  ...and disadvantages.
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;But not everything in a DAO is a dream come true. As Uncle Ben once said, "with great power comes great responsibility". Opensource code can lead to easier information-gathering processes from hackers, and also the exposition of the organization's business plan.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With your source code out there in the open, it's easy for any malicious agent to find it and try to exploit it. The famous case about The DAO Hack, where millons of dollars were transfered by using a bug in the originals The DAO smart contracts, really created an impact, forcing Ethereum to be hard forked into Ethereum and Ethereum Classic. For that reason, investments in AppSecurity, Testing and Threat Hunting are necessary, because DAOs usually are connected to a huge amount of stakeholders, and also these stakeholder's money. The code must be really impecable and adamant before the implementation, once blockchain technology doesn't allow edits or deletions, only appends: Once the smart contract is in the blockchain, it's there forever. &lt;br&gt;
Another "problem" with the transparency provided by the opensource nature of DAOs is that your business plan will also be out there for everyone to see and even copy. While many companies up to this day were created based on secrecy of their plans, this new implementation might be a new paradigm shift in how companies create their businesses. Based on the what we can observe from crypto business models, having an opensource business plan is not necessarily a drawback. Most of those business models are based on a virtuous cycle, a network effect that spirals upwards from the moment the company is created.&lt;br&gt;
It happens because of the uniqueness of this model in the corporate world. Let's say you create your DAO with your unique business plan. It allows day one investments from all over the world, because the cryptocurrency is the same everywhere and it won't rely on banks and countries regulations. Someone from across the globe can fund your company minutes after it was deployed on the chain. This way, the number of users and the adoption rises constantly and it will provide a stronger network based on your DAO. It is simple: The more the risk around your model decreases, the more its defensibility rises, making your company way more trustworthy.&lt;br&gt;
Now let's say someone observes how well your company is doing and decides to do exactly the same. They go there, copy your code, and start their business all over again. They will have a whole new network, without as many users and adoption - and, consequentially, less risk - as yours. A newcomer, having to decide between a well-established network and a completely new network, will most likely go for the well-established one, especially when their money is at stake. If your DAO proved to be successful and reliable with time, then you'd have no problem whatsoever to attract new users.&lt;/p&gt;

&lt;h1&gt;
  
  
  How will DAOs shape the future (and the present!)
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;An educational organization open for everyone in the world, independent and self-governing? A charity institution free from corruption and funding projects chosen democratically? All these scenarios are possible with DAOs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that you got a gist of how a DAO works, the possibilities are enormous in this field. They can restructure the future, so we can abandon the centralized, trust-dependent model we are based on right now. Let's make an exercise and imagine what problems we can tackle with this new model.&lt;br&gt;
Think about Kickstarter, or any other crowdfunding platform. They usually function like this: Someone goes there and posts a project, its goals and how people can contribute to it. Once the project is funded, all the money goes to the creator of the project, and people must expect that they will use that money correctly. This dependency on trust might be prejudicial, but smart contracts can assure it can be fulfilled with a few lines of code. How would it work? Imagine that, instead of transfering the money to the creator of the project, it transfers it to a pooled investment fund. Then, everytime the manager or the creator wants to use some of that money to buy something, they should provide a proposal, that would be voted by each member in that pool. Only if it's successfully voted and accepted, the money could be transfered to the manager/creator or directly to some other cryptowallet, and the project could advance. This way it would be easier to track the transfers and expenses, and everyone would have a voice in voting for where the money would go.&lt;br&gt;
Now let's think about an University or school. A lot of what happens there is directly influenced by a rector, or even a government, and a most of the money comes from investments from shady sources demanding biased researchs, and no information is truely free. In Brazil, for example, we are dealing with problems like this right now, with the government allocating money meant to be used in research and education somewhere else. In a DAO Model, the decisions where the money would be invested would depend on the teachers and students, and they would vote where they would like to see that money. This is a way to promote a free, unbiased development of information and allocation of money.&lt;br&gt;
In general, DAOs are still growing and there is space out there for all sorts of new ideas. MakerDAO, for example, is leading this movement, and they are also responsible for DAI, a top stablecoin. Aragon, on the other hand, is facilitating people's adoption to this new model, and you can create a simple DAO in minutes using their boilerplate code. The possibilities are enourmous, and the time is right: We just need to educate ourselves better about it to start creating our way into this new paradigm.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>crypto</category>
      <category>ethereum</category>
      <category>smartcontract</category>
    </item>
    <item>
      <title>Understanding SHA256</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Wed, 08 Jul 2020 05:00:00 +0000</pubDate>
      <link>https://dev.to/arturserra/understanding-sha256-3f08</link>
      <guid>https://dev.to/arturserra/understanding-sha256-3f08</guid>
      <description>&lt;p&gt;As I dive deeper into my studies related to blockchain and blockchain development, I find some intriguing core concepts that shine a light towards the inner intricacies of how the blockchains work.&lt;/p&gt;

&lt;p&gt;One of these concepts that are vital to the blockchain functionality is called SHA256. It is a Secure Hashing Algorithm, commonly used for digital signatures and authentication. But before we try to get a better grasp of it, let's understand what a Hash Algorithm is.&lt;/p&gt;

&lt;p&gt;Let's say you want to transfer some data from one point to another, and you need this data to be secure and easily verifiable. By using the Hash Algorithms, you are going to crush down that big chunk of data into a single line - a hexadecimal value that summarizes what is contained in that file.&lt;/p&gt;

&lt;p&gt;To illustrate that, let's use this awesome website called &lt;a href="https://andersbrownworth.com/blockchain/hash"&gt;AndersBrownworth.com&lt;/a&gt;. They have a tab focused on Hashing, and we can go there and play with any values inside the Data box, and we can observe how the hash value is going to change. For this example, I'm going to use a short story from Hans Christian Andersen that I really like: The Little Match Girl. &lt;/p&gt;

&lt;p&gt;The original short story has 5456 characters, but when it's hashed down, it will be represented by a 64 characters string.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0uny_z-U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nf3b3lyo83vqhoalrjqo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0uny_z-U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nf3b3lyo83vqhoalrjqo.png" alt="Short story example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is important to note that, no matter how many characters you pass through a hashing algorithm, you will always get a string with the same amount of characters as a result. Even if we write a simple "Hello there" in the data box, it will return a 64 characters string to us.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YcSngLgg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3adafj9t22i7blo1mrci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YcSngLgg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3adafj9t22i7blo1mrci.png" alt="Hello there example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This hexadecimal value appears to be random, but it isn't. As it was said before, it is dependent on the original value, so even if we make small changes in the text, it will return a different value. For example, the hash value for our saddening short-story is &lt;strong&gt;5548efc1d8e6a691a730a042e3f32b26e163ce9ba050116edc2af3b2705f49cb&lt;/strong&gt;. That combination of 5456 characters in that same order will always return this value. But if we add an "A" to the beginning of the text, we will get a different result: &lt;strong&gt;9ad55f658a3636ca079a0fe74b5a06a914977ba15b4db7f012ae2e47c8d1417b&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sNm7NBi---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e3d22wo8ichm7u6sb97c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sNm7NBi---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e3d22wo8ichm7u6sb97c.png" alt="Extra A example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even if we remove the extra "A" we added, going back to the original text, and then we change a semicolon for a regular comma, we still get different results: &lt;strong&gt;2de2316e5e5f9e10ee899a7f42dc51a19f7fd9a219dae672ada1a80f5c74134a&lt;/strong&gt;. So this might show how powerful SHA256 is, especially when for digital signatures. &lt;/p&gt;

&lt;p&gt;This &lt;em&gt;Avalanche Effect&lt;/em&gt;, this event of changing a letter, a signal or even a single byte in the original file and with that you modify completely the hash output, is one of the three requirements of a hashing function. The other two being &lt;em&gt;Speed&lt;/em&gt;, which is also fairly great in SHA256, because it can find a good balance between fast enough - so it will improve its adoption - and slow enought - so it's not easy to crack - and &lt;em&gt;Collision Resistant&lt;/em&gt;, which means it will prevent that two different inputs will provide the same output. Due to its calculations it's almost impossible to naturally create the same output with two different inputs, but if one can manipulate the function to artificially create a collision, it could result in a security break.&lt;/p&gt;

&lt;p&gt;Summarizing, the process goes like this:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zgJ7vzT0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/13qlmtty7w2f4vqkcakn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zgJ7vzT0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/13qlmtty7w2f4vqkcakn.png" alt="Hashing Process"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And how is it used in the various blockchains out there? With the hashing function, it is possible to create a different hash to each block in the blockchain. The reason for this is to provide an unique identifier for every block, allowing us to reference a block by its "digital fingerprint", the hash. It also allows the connection between to blocks, creating a chain, which I am going to explain in a future text. &lt;/p&gt;

&lt;p&gt;Now, to implement a basic usage of the SHA256 with JavaScript, let's install a npm package called &lt;a href="https://www.npmjs.com/package/crypto-js"&gt;CryptoJS&lt;/a&gt;. Its installation is quite simple, you just need to run&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install crypto-js&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l5gjExQi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/a7ctsbis5sfhzfet5oy4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l5gjExQi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/a7ctsbis5sfhzfet5oy4.png" alt="Installing CryptoJS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once it's done, create a JavaScript file in the same folder you installed CryptoJS and open it. &lt;/p&gt;

&lt;p&gt;Now we are going to import the CryptoJS package using:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const CryptoJS = require("crypto-js");&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, we just need to call this function we just imported, using:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;let hash = CryptoJS.SHA256("Message")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This step will create a Word Array based on the message input. So let's change the input and add a functionality that will encode the Word Array into a hexadecimal string:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;let hashHex = hash.toString(CryptoJS.enc.Hex)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And then, to log it to our terminal, we'll use a regular console.log&lt;/p&gt;

&lt;p&gt;&lt;code&gt;console.log(hashHex)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the end, the code will look more or less like this:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dgjC8Zff--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/40k2gkqs34im7b9ew4cw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dgjC8Zff--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/40k2gkqs34im7b9ew4cw.png" alt="Full Code SHA256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, time to test it. By running a &lt;code&gt;node sha256.js&lt;/code&gt;, we can get the result in the terminal &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GTL3mdg5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/u2celjj40og3zyqnz90o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GTL3mdg5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/u2celjj40og3zyqnz90o.png" alt="SHA256 Terminal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We got a hexadecimal value &lt;strong&gt;ba7c7bc89cad8d2b8c024ab063493af7d2e310277c64e6d9cfa822deca852152ba7c7bc89cad8d2b8c024ab063493af7d2e310277c64e6d9cfa822deca852152&lt;/strong&gt;.&lt;br&gt;
If we go back to our hashing companion &lt;a href="https://andersbrownworth.com/blockchain/hash"&gt;AndersBrownworth.com&lt;/a&gt; and write the same input, we get the same result! Nice, it worked! (:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bFgn62bl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ldcrnikt52xylyxqwnyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bFgn62bl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ldcrnikt52xylyxqwnyb.png" alt="Hash SHA256 test"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this we conclude our first approach to SHA256, understanding how it works, why it's used in blockchain technologies and how to easily implement it with JavaScript. &lt;br&gt;
If you want to keep studying this subject, I'll leave down below some links that might be useful to kickstart your research! Keep coding!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.youtube.com/watch?v=b4b8ktEV4Bg"&gt;Hashing Algorithms and Security - Computerphile&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.youtube.com/watch?v=DMtFhACPnTY"&gt;SHA: Secure Hashing Algorithm - Computerphile&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://medium.com/shokone/hash-no-not-that-kind-the-crypto-kind-2e8bf616aa24"&gt;The Evolution of the Cryptographic Hash Function in Blockchains&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>blockchain</category>
      <category>cryptography</category>
      <category>security</category>
    </item>
    <item>
      <title>HackTheBox Write-Ups - Lame</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Thu, 02 Jul 2020 05:23:25 +0000</pubDate>
      <link>https://dev.to/arturserra/hackthebox-write-ups-lame-49c</link>
      <guid>https://dev.to/arturserra/hackthebox-write-ups-lame-49c</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jw1XfhC8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6ojnxkyuwnnf1h97ew32.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jw1XfhC8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6ojnxkyuwnnf1h97ew32.png" alt="Lame Info Card"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lame is, by no means, a difficult box. It also figures as the first Linux Machine from &lt;a href="https://docs.google.com/spreadsheets/u/1/d/1dwSMIAPIam0PuRBkCiDI88pU3yzrqqHkDtBngUHNCw8/htmlview#"&gt;TJ_Null's OSCP-Like VM's list&lt;/a&gt;, so it's a nice place to start. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; Phase One - Information Gathering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As always, we start with a simple nmap command, just to check which ports are open and which services are running in those ports. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-T4&lt;/strong&gt; Scan Speed. Fast and noisy, but okay for this lab. &lt;br&gt;
&lt;strong&gt;-p&lt;/strong&gt; Scans all ports&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rR2Tw_ck--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/baof4djhcjtbunhhxm6o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rR2Tw_ck--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/baof4djhcjtbunhhxm6o.png" alt="nmap scan"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, once I've found all open ports, I go for an -A with using also those ports as parameters, so we can get all the information we can from them, and then proceed to investigate the vulnerabilities we find.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;-T4&lt;/strong&gt; Scan speed&lt;br&gt;
&lt;strong&gt;-p21,22,139,445,3632&lt;/strong&gt; The ports I want to focus my scan on&lt;br&gt;
&lt;strong&gt;-A&lt;/strong&gt; Returns all the information nmap can about those ports&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PuLoezW0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rg22o1k8rpfpxi3kv8gn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PuLoezW0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rg22o1k8rpfpxi3kv8gn.png" alt="second nmap scan"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can also get information from the scripts that can be useful to exploit those open ports. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DPQpc6p9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1dezmaubx4n0taf2ye4z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DPQpc6p9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1dezmaubx4n0taf2ye4z.png" alt="Scripts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd like to say I pretty much enjoy this method, because it does the hard work only with the necessary ports, saving us some time, but it's not The Right Method to follow. It's important to explore and experiment with those methods, and learn how to use them in a way you're satisfied. The most important thing I'm learning about pentesting is to develop your methodology as you go, in a way it will be easier for you to understand the steps to a successful process. &lt;/p&gt;

&lt;p&gt;Back to our recon, it's good to note two things here are that are really eye-catching: SMB usually indicates a go-to port to exploit. But on Port 21 it also has a ftp, which allows an anonymous login. So let's try it first.&lt;/p&gt;

&lt;p&gt;Running searchsploit to look for exploits related to tis FTP (using, as parameter, its version - especially because versions can be really good starting points to look for an exploit), we get the following results &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5qlcY2Kj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ed0z7gwwjbcywtb5dtb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5qlcY2Kj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ed0z7gwwjbcywtb5dtb2.png" alt="Searchsploit results"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; Phase Two - Exploitation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We then go to metasploit and look for our vulnerabilty. Luckily we find a backdoor that is rated "excellent", which is good news (usually). &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MD3TR-IZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qeumrq3a7nhap0znguhl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MD3TR-IZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qeumrq3a7nhap0znguhl.png" alt="Metasploit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we run &lt;strong&gt;use 3&lt;/strong&gt; to use the third option displayed in the table. Then, once we're inside our exploit's tab, we run &lt;strong&gt;options&lt;/strong&gt; to check what we need to objectively run this exploit. It only has two required fields, one being RPORT which is already prefilled with the target port 21, and a RHOSTS field, yet to be completed. We run &lt;strong&gt;set RHOSTS 10.10.10.3&lt;/strong&gt;, using our target's IP, and then we run &lt;strong&gt;options&lt;/strong&gt; again just to check if everything is on order. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eny4cvsv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2yj9fksieplk6iz0inhj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eny4cvsv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2yj9fksieplk6iz0inhj.png" alt="Exploit settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We try running the exploit twice, but it fails. In my first attempts to use Metasploit I got really confused on why it was happening, but with time I learned it's quite common for it to happen, depending on how patches come and solve those vulnerabilities. But it's okay, we just need to jump to another port and try another exploit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pF86ig9D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e2ytqh71a0p8yekrug2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pF86ig9D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e2ytqh71a0p8yekrug2w.png" alt="Exploit fails"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I said before, SMB/Samba are really good places to start exploiting, since they are quite dangerous. In our information gathering tab, we found a Samba with a very specific version. Let's try looking for this one now on Metasploit. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eJ5t1xAX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/afqgc3jkqzqgq6rvhil9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eJ5t1xAX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/afqgc3jkqzqgq6rvhil9.png" alt="Samba Metasploit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As we can see, one of the exploits is related to Metasploit, so since we have this useful tool already in our hands, let's jump into it first and see what we can get.&lt;/p&gt;

&lt;p&gt;Running a "search samba usermap script" on Metasploit, we find a lot of options, and paying attention to then, we find the one that matches exactly what we are looking for&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PQZHOwGr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sfsjoq3qzrga99unchi6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PQZHOwGr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sfsjoq3qzrga99unchi6.png" alt="Samba Found in Metasploit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We just need to run &lt;strong&gt;use 151&lt;/strong&gt;, {151 being the code for that exploit shown in the first column}, to access it. Running &lt;strong&gt;options&lt;/strong&gt; we see what needs to be set.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BjpdbGoi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dhhnq6imzc1he7pmbv37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BjpdbGoi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dhhnq6imzc1he7pmbv37.png" alt="Accessing the exploit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We then configure our exploit with &lt;strong&gt;set RHOSTS&lt;/strong&gt;, running &lt;strong&gt;options&lt;/strong&gt; once more just to check if all the required and important information are filled.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8J6HV67B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4bjwwuvq1itdhocllu4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8J6HV67B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4bjwwuvq1itdhocllu4w.png" alt="Exploit fully set"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With all the required fields filled, we just need to run the exploit...&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5g22TEdb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b98z3iohd3tt9zjr60kl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5g22TEdb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b98z3iohd3tt9zjr60kl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And voila, we have a shell! Nice!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&amp;gt; Phase Three - Post-Exploitation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We start this phase running a &lt;strong&gt;pwd&lt;/strong&gt; and a &lt;strong&gt;whoami&lt;/strong&gt; to see in which directory we are, and in which folder we are.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GZN1P22K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4acnyipdg0mjcmac9vg2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GZN1P22K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4acnyipdg0mjcmac9vg2.png" alt="pwd and whoami"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nice, we already have root privileges, so no need to escalate here. Now, we just need to go after our flags on user.txt and root.txt&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SQB4ssfw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gzqrph236b0otgxlbcmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SQB4ssfw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gzqrph236b0otgxlbcmm.png" alt="user.txt"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y-n6Pbe5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rq7tu59n8jxdzrs0wf94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y-n6Pbe5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rq7tu59n8jxdzrs0wf94.png" alt="root.txt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's it! Lame has been pwned! (:&lt;/p&gt;

&lt;h2&gt;
  
  
  Table Of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/manticorevault/hackthebox-write-ups-an-introduction-259b"&gt;Step 0 - Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/manticorevault/hackthebox-write-ups-lame-49c"&gt;Step 1 - Lame&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>HackTheBox Write-Ups - An Introduction</title>
      <dc:creator>Artur Serra</dc:creator>
      <pubDate>Thu, 02 Jul 2020 04:32:12 +0000</pubDate>
      <link>https://dev.to/arturserra/hackthebox-write-ups-an-introduction-259b</link>
      <guid>https://dev.to/arturserra/hackthebox-write-ups-an-introduction-259b</guid>
      <description>&lt;p&gt;Hello, internet person,&lt;/p&gt;

&lt;p&gt;The time to write my first post here on Dev.to has come! After struggling to think of an idea or really cool and worthy project to start writing some things down, I finally decided to try and write something that was almost done: My write-ups.&lt;/p&gt;

&lt;p&gt;A bit of context first: HackTheBox is this awesome platform in which you can try your pentesting skills with some virtual machines - or boxes - packed with some vulnerabilities ready to be exploited. Sounds nice, huh? As a cybersecurity student, it's a must for me to experiment with those labs, especially in order to pursue the OSCP - Offensive Security Certified Professional - a very important cybersecurity certification. &lt;/p&gt;

&lt;p&gt;To be quite honest, I still don't know if I want to take the OSCP as of now... but I understand how taking it and the Advanced Web Attacks Exploitation certification's exam can be really useful to my main goal of developing my developer skills with a good base in Security. So, why not start preparing for it right now, even if in a slower pace?&lt;/p&gt;

&lt;p&gt;That being said, after a lot of research and &lt;a href="https://rana-khalil.gitbook.io/hack-the-box-oscp-preparation/"&gt;this awesome story from Rana Khalil&lt;/a&gt; about her journey to get her OSCP Cert, I finally had a roadmap. Now, time to follow it.&lt;/p&gt;

&lt;p&gt;The targets were finally there, since I decided to follow her footsteps and also try to hack all the machines from &lt;a href="https://docs.google.com/spreadsheets/u/1/d/1dwSMIAPIam0PuRBkCiDI88pU3yzrqqHkDtBngUHNCw8/htmlview#"&gt;TJ_Null's OSCP-Like VM's&lt;/a&gt; list. Important to note that those machines are always being updated, which makes this list relevant at all times. Also, he has a list for VulnHub machines, which I might consider every now and then when my HackTheBox subscription gets expired (since I'm not in an automatic subscription, leaving it for when I decide to focus on Retired Machines, only accessible with the VIP account).&lt;/p&gt;

&lt;p&gt;Now I have the roadmap and the targets, but... something is still missing: I need to learn how to walk it. Gladly, I found really good tutors in University, but I was a total, complete noob in all things related to pentest, and I still needed a nice place to start. That's where I found &lt;a href="https://www.udemy.com/course/practical-ethical-hacking/"&gt;Heath Adam's Practical Ethical Hacking course at Udemy&lt;/a&gt;. His methodology just clicked with me. It was way easier to understand the basic concepts, even though I still didn't finish the course - It's paused right now while I write this - because his way of explaining things just inspired me to start this post and all this plan to document my way through TJ_Null's list.&lt;/p&gt;

&lt;p&gt;Without further ado, let's go hack some things!&lt;/p&gt;

&lt;h2&gt;
  
  
  Table Of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/manticorevault/hackthebox-write-ups-an-introduction-259b"&gt;Step 0 - Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/manticorevault/hackthebox-write-ups-lame-49c"&gt;Step 1 - Lame&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
