<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Eugene Song on Medium]]></title>
        <description><![CDATA[Stories by Eugene Song on Medium]]></description>
        <link>https://medium.com/@esong28?source=rss-2c46da7ce9df------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*-cI_nUlz-MNojUAKWDGouw.jpeg</url>
            <title>Stories by Eugene Song on Medium</title>
            <link>https://medium.com/@esong28?source=rss-2c46da7ce9df------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 09 Jun 2026 12:50:23 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@esong28/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[HackTheBox — Public Exploits]]></title>
            <link>https://medium.com/@esong28/hackthebox-public-exploits-6bc45c753ce6?source=rss-2c46da7ce9df------2</link>
            <guid isPermaLink="false">https://medium.com/p/6bc45c753ce6</guid>
            <category><![CDATA[exploitation]]></category>
            <category><![CDATA[cybersecurity]]></category>
            <category><![CDATA[hackthebox-writeup]]></category>
            <category><![CDATA[metasploit]]></category>
            <dc:creator><![CDATA[Eugene Song]]></dc:creator>
            <pubDate>Thu, 09 Jan 2025 07:13:19 GMT</pubDate>
            <atom:updated>2025-01-09T07:13:19.616Z</atom:updated>
            <content:encoded><![CDATA[<h3>HackTheBox — Public Exploits</h3><h3>Notes/bit about Public Exploits</h3><p>This is the start of many short publications on my journey through HackTheBox’s Penetration Tester job role path. Public Exploits introduces the importance of publicly searching for existing exploits to applications and services.</p><p>These services are identified by knowing the host name and the port which can be gained through the use of the <strong>nmap </strong>command.</p><p><strong>Searchsploit</strong> is a command line tool also used to search for these exploits.</p><p>The <strong>Metasploit Framework (MSF)</strong> is an all-in-one pentesting solution which contains these exploits and conveniently, instructions to perform them as well.</p><h3>My Experience</h3><p>Initially, I enumerated through the server and found this file <a href="http://94.237.54.42:50394/xmlrpc.php">http://94.237.54.42:50394/xmlrpc.php</a>, which read back “XML-RPC server accepts POST requests only.” Naturally, I looked for xml-rpc related exploits to no avail. After setting the required options for each exploit, each attempt ended with “the target is not exploitable,” after running check on the target host to see if it is at all exploitable.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Vf7GxrQPjt7MBcpqeJpTFQ.png" /><figcaption>set exploit options &amp; run exploit</figcaption></figure><p>I revisited the host page, and the landing page talks about a simple backup plugin 2.7.10 for Wordpress. I looked for any exploits on a simple backup plugin and found one — <em>auxiliary/scanner/http/wp_simple_backup_file_read</em>.</p><p>I set the options, discovered check was a success and ran the exploit. It returned a .txt file. To get the flag, I had to set the exploit option, FILEPATH to /file.txt, allowing me to move on.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dF2OGuqRfVylfG--pFvuYA.png" /><figcaption>getting flag via .txt file</figcaption></figure><h3>What I learned</h3><p>In retrospect, the lab is a relatively simple one, had I started off exploring the most obvious signs. I am happy that I utilized previous techniques like web enumeration using Gobuster to search for clues and to practice what I’ve learned from before. <em>The main takeaway is to begin my attack using the obvious signs first before going down a rabbit hole and exploring more obscure areas — start off simple.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6bc45c753ce6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My Cloud Resume Challenge Experience (AWS)]]></title>
            <link>https://medium.com/@esong28/my-cloud-resume-challenge-experience-aws-f7f316f2c727?source=rss-2c46da7ce9df------2</link>
            <guid isPermaLink="false">https://medium.com/p/f7f316f2c727</guid>
            <category><![CDATA[cloud-resume-challenge]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[personal-experience]]></category>
            <dc:creator><![CDATA[Eugene Song]]></dc:creator>
            <pubDate>Thu, 21 Mar 2024 08:39:29 GMT</pubDate>
            <atom:updated>2024-03-21T08:39:29.056Z</atom:updated>
            <content:encoded><![CDATA[<p>This is my take on the Cloud Resume Challenge using AWS. Here, I discuss my journey through the challenge and the valuable lessons I learned. I want to preface that this review provides only a high-level overview, with some implementation details omitted.</p><p>The challenge, found <a href="https://cloudresumechallenge.dev/docs/the-challenge/aws/">here</a>, can be tackled using any of the three major Cloud providers: AWS, Azure, and GCP.</p><p>For me, the Cloud Resume Challenge served as a means to gain hands-on experience with Cloud technologies that one would use on the job. Fresh off obtaining my AWS Solutions Architect — Associate certification, I wanted to further develop my practical skills in a lab-styled format.</p><h3>Tasks 2/3 — HTML &amp; CSS</h3><p>These sections involved creating HTML and CSS files for the resume, which would be hosted as a static website in Task 4. Realistically, you can create any content to host but a resume is perfect for motivation and for professional future use. I have programming experience so these tasks provided a fun time for me to reconstruct my PDF resume from scratch.</p><h3>Task 4 — Static Website</h3><p>Task 4 was where I got to see the work I put into Tasks 2/3 come to life. I created an S3 bucket with default configurations and uploaded the HTML and CSS files.</p><p>At this point, I had my website files stored in an object storage. But that wasn’t enough to display the website. I enabled the <em>Static website hosting </em>configuration of the S3 bucket which can be found at the bottom of the Properties tab of our Bucket.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n-bUPvLx_RqHjs9WYbhisA.png" /><figcaption>Properties tab of S3 bucket where Static Website Hosting configuration is found.</figcaption></figure><p>Enabling it generates an AWS-generated a URL, where I was met with an Access Denied error. One of the core pillars of Cloud technology is Identity and Access Management (IAM) and the crucial step I missed was to apply a Bucket Policy to the S3 Bucket which specifies who can access the bucket (Principal) and what actions they are allowed to perform on it. Afterwards, the link rendered my resume.</p><h3>Tasks 5/6 — HTTPS/DNS</h3><p>Next step was to configure the site to use HTTPS. Doing so required the integration of CloudFront, a CDN service that delivers static and dynamic web content, video streams, and APIs around the world, securely and at scale. I generated an SSL certificate, purchased a private domain via Route53 (check out <em>songeugene.com</em>), referenced that custom domain during the CloudFront creation process and provided my S3 bucket as its origin from Task 4.</p><p>I thought I was done here but this was where I ran into my first bug when I entered my domain into the browser! Where I made an oversight was not including the <em>Default root object</em> under the Settings tab of the CloudFront distribution I had just created. In addition to declaring your S3 origin, ensure that you put the html file that you want displayed to the user so that CloudFront knows what asset to display.</p><p><em>Note: For Tasks 5/6 and onwards, ‘Static website hosting’ in the S3 bucket settings must be disabled as CloudFront will now act as the point of contact for any user who visits your website.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5QbAq2vSrMbCK-AAzfcY5Q.png" /><figcaption>Settings tab of CloudFront distribution where Default root object must be declared.</figcaption></figure><h3>Tasks 7/8/9/10 — Javascript/Database/API/Python</h3><p>For these sections, dynamic interactive elements were added to the website so that it does the following when anybody visits it: record each request, update the persistent visitor counter in a DynamoDB database and display it. Python was used to communicate with DynamoDB, while a Lambda function, triggered by an API Gateway, handled the updates. CORS configurations were implemented for internet calls.</p><p>I started off by creating a DynamoDB database and referenced it in my Python code. Here we get our first taste of using the library to work with AWS resources, <em>boto3</em>.</p><p>As mentioned in the cloud resume challenge documentation, we are not to directly communicate with DynamoDB from the Javascript code so I created a Lambda function, where I imbedded my Python code. Then I set an API Gateway as the trigger to the Lambda function, created an HTTP API to call the Lambda function and finally set CORS configurations because it will be called from the internet. This was a good point to stop and learn the difference between HTTP and REST API (in short, HTTP is a lightweight version of REST API).</p><p>The last step was to add the HTTP API endpoint to the Javascript code and to reference the script in the html file so that anytime a request is made to the site, the endpoint is called upon a window load.</p><h3>Task 11 — Tests</h3><p>Tests were created to ensure proper functionality of the Lambda function handler, utilizing the <em>moto </em>library. These tests would play a crucial role in future CI/CD pipeline implementation.</p><h3>Task 12— Infrastructure as Code (IaC)</h3><p>This section was by far my favorite, involving the recreation of previously manually created AWS resources using Terraform. I chose Terraform as my Infrastructure as Code (IaC) tool for its universal compatibility across Cloud providers.</p><p>I learned a vast amount of Terraform, its syntax and the wide array of Terraform providers in its registry. Putting it all together, I was able to spin up and most importantly, destroy an entire infrastructure in a matter of minutes, really showing me the power of Infrastructure as Code.</p><p>Having to Terraform my infrastructure taught me the efficiency and granular control offered by IaC, shaping my preference for Terraform in future projects.</p><h3>Tasks 13/14/15 — Source Control/CI/CD (Backend + Frontend)</h3><p>In the final stretch, all code was stored in a GitHub repository. GitHub action workflows were created for both frontend and backend components, utilizing the tests from earlier, automating code changes and ensuring synchronized updates across the Terraform-created infrastructure and AWS resources.</p><p>This automation marked the culmination of the project, eliminating manual intervention in AWS and enhancing overall workflow efficiency.</p><p>In conclusion, the Cloud Resume Challenge provided an invaluable opportunity to deepen my understanding of AWS services, refine my skills in web development and infrastructure management, and embrace automation for improved project workflows. I highly recommend anyone interested in Cloud to get their feet wet in this challenge!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f7f316f2c727" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>