PentesterLab Pro Review

Recently I started a new job where a portion of my work was related to Application Security. I have done a number of web application assessments before, however it has always been my weakest area. I have read most of the usual web application testing resources which you can find listed here. I have also submitted to bug bounty programs, so the only material I felt I could benefit from were labs. I needed something hands-on that covered a wide range of web vulnerabilities and real world web exploit scenarios.

PentesterLab is a set of exercises downloaded as ISO’s which include course material that can be worked through to expand one’s skillset. I personally started with the free material and even used the ISO’s to create tools. After completing a number of the ISO’s, I noticed some very intriguing material was released for the Pro edition. I decided that getting the Pro subscription was more than worth it, so I signed up.

Navigating the Site

Once I logged in, I was greeted with a straightforward interface and a clear path to further develop my skillset. I started with the Introduction Badge which familiarized me to the scoring system and a few web fundamentals. Much of the material wasn’t new to me, but it is an excellent building block for anyone new to web application penetration testing:

Essentials Badge

The Essentials Badge section is where I really started to improve my skills. This section contains 60 exercises covering the following topics:

  • Authorization issues
  • Code Execution
  • Command Execution
  • Directory Traversal
  • File Includes
  • LDAP Injection
  • MongoDB issues
  • Open Redirection
  • SQL Injection
  • SSRF [Server Side Request Forgery]
  • SSTI [Server Side Template Injection]
  • File Upload Vulnerabilites
  • XML Injection
  • XSS [Cross Side Scripting]

Anybody who does web application testing will tell you that this list of exercises is a great foundation for moving into web application penetration testing or just improving your bug hunting skills. By moving through these exercises, I was able to increase my understanding of web technologies, increase my ability to use tooling to solve challenges, and also get hands-on experience with a plethora of vulnerability types.

All of these exercises can be found in the Essentials Badge section and are are tracked and hosted online, which makes them accessible everywhere. I was able to login effortlessly at home or work to complete challenges:

Certificates of Completion

When you complete these challenges, you are issued a certificate of completion. These are both a nice trophy for yourself and something you can show to potential or current employers. These certificates are easily accessible in your account at all times:

After working through these exercises, you build a strong foundation to move on to the other exercises. These are longer, more challenging exercises that contain real-world exploit scenarios. These are ranked by difficulty, so you can guide your own learning and gradually build up your skills. New exercises are added frequently, making this a modern and challenging experience. Small hang ups can teach you the little details that are necessary in testing web apps.

A list of exercises can be found here

Final Thoughts

Overall, PentesterLab Pro is a great experience. I recently completed the Essentials Badge along with a few of the longer exercises. This has taught me quite a bit already. I can also say that I have used some of these techniques in my daily work. The price is also very reasonable compared to other training. If you want additional details about getting Pro you can go here

XSS on Amazon [1-Click devices]

I wanted to share a bug that is far from complicated but drives home the point that all data that is controlled by a user should be sanitized & output encoded if it will return back to the client. Sometimes because of the nature of the data developers assume that certain types of input can’t exist there. This is a trick I have used to find multiple bugs in the past couple of years.

All of my personal devices such as iPhone and iPad  have names that can trigger XSS. I achieve this by naming the device some XSS payload such as the simple one found below:

This has triggered XSS on many different softwares including notification software, routers, and in this case Amazon. It does this because many of these softwares have a page that lists devices and is viewed by other users. In the case of Amazon the XSS was triggered when accessing the one click devices. The bug was reported through email as seen in the next section.

Filing the bug

Report date: July 19th 2017

Issue fix confirmed: November 13th 2017

Reported to: Amazon Security []

Bug Type: XSS(Stored)

Under the account settings for 1 click purchasing which can be found here:
Your Account > Manage Default Address and 1-Click Settings
The device names listed under 1-Click Status are not sanitized
My phone name is <script>alert(1)</script> and once this is loaded into the 1-Click Status an alert window appears with the number 1
If you need additional information please let me know.


Additionally later I found that this could be triggered from a phone as seen in the example below. This update was reported to Amazon on August 19th 2017 :


This issue was fixed by adding output encoding to the device listing. Additionally they have moved 1-click device listing to it’s own page under Your Account -> 1-Click settings -> Manager 1-Click for your devices:


In this case the 1 click device list is only something that the user would view and the attack vector is through the name of their device. This means the only valid attack vector as I specified to them in a later email is to attack reps who assist me with my account and have to view my 1 click devices for troubleshooting. This however is not always the case in all bugs I have discovered. In other bugs I have discovered other users would be affected by my XSS payload.