Ideas Engineered for Tomorrow
We Engineer Services & Solutions for Your Business Needs
Consulting Services Hire Book Consulting

Penetration Testing Services in India

Penetration testing services in India for CTOs, founders and heads of engineering in the US, UK, Canada, Australia and New Zealand who need a person, not a scanner, trying to break their system on purpose. Scoped in writing, authorised in writing, run against OWASP WSTG and PTES, and reported so your own developers can reproduce every finding without us in the room.

What Is a Penetration Test, and How Is It Different From a Vulnerability Scan?

A vulnerability scan compares what it can observe against a database of things known to be broken, and prints a list. It is fast, cheap, repeatable and worth running constantly. A penetration test is a person, given a window of time and a defined boundary, trying to achieve a specific outcome inside your system. Read a different customer's records. Get from a low privilege account to an administrator. Get from your public web application to something on the internal network that was never meant to be reachable from it.

The difference shows up in the shape of the output. A scan says your library version has a published advisory. A test says that library is only reachable through an endpoint that already requires authentication, so it is not your problem this quarter, but the avatar upload feature next to it will fetch any URL you give it, and that is how somebody reads your cloud instance metadata. One of those two statements changes what your team does on Monday.

Buyers get sold the two interchangeably, which is why so many reports labelled penetration test are a scanner export with a cover page. You can spot the substitution quickly. If the findings have no reproduction steps, if every risk rating is exactly the tool's default severity, if nothing in the report required knowing what your application does for a living, you bought a scan. A real test contains findings the tool could not have produced, because they depend on understanding that invoice 4471 belongs to a different company.

There is a third term in the mix that muddies things further. A vulnerability assessment sits between the two: it is human-reviewed, it uses tooling heavily, and it tells you what is wrong without proving exploitability. That is often the right purchase for a large estate where the goal is coverage. A penetration test goes narrower and deeper and ends with proof. Knowing which of the three you actually want is most of the value of the scoping call, and we will happily tell you that a test is the wrong purchase this quarter.

This page is about the human-led engagement. The continuous, automated half of the problem, meaning static analysis on pull requests, dependency and secrets scanning, authenticated dynamic scans on a schedule, lives on our security testing services in India page. The two are complements, not alternatives. Tooling stops the same class of bug reappearing every Tuesday. A test finds the classes your tooling cannot imagine.

Scoping: The Conversation That Decides Whether the Test Is Worth Anything

Almost every disappointing penetration test was scoped badly, and the scoping usually failed in one of two directions. Either the boundary was drawn so wide that a fixed window got spread thin across forty hosts and nothing was tested properly, or it was drawn so narrowly around one application that the tester was forbidden from following the only path an attacker would actually take.

What we need to know before quoting anything

The asset list, precisely. Domains, subdomains, IP ranges, API base URLs, mobile application builds, cloud accounts. Written down, agreed, and with a stated position on anything discovered later that was not on the list. Test scope creep is real and needs a rule agreed in advance, because a tester who finds an undocumented admin subdomain on day two should not have to guess whether touching it is allowed.

The roles. How many distinct privilege levels exist, and can we have working credentials for each of them plus at least two separate accounts at the same level. That second detail matters more than anything else on this list, and teams forget it constantly. Without two accounts at the same tier we cannot test whether one customer can read another customer's data, which is the single most common serious finding in modern SaaS.

The environment. Production, staging, or a dedicated test instance, and how faithfully the non-production one matches. A staging environment with a different authentication provider, no WAF, mock payment integrations and an empty database will produce a report about staging. We will say so rather than quietly test it and hand you something misleading.

The prohibitions. What must not be touched, what must not be sent, what time windows are forbidden, whether denial of service testing is in or out, whether social engineering and phishing are in or out. All of it in writing.

The goal. This is the question that changes a test most and gets asked least. Are you testing because a customer's security questionnaire demands an annual report, because you are about to launch a payments feature, because you suspect the acquisition target you are diligencing has problems, or because somebody already got in and you need to know how far they could have gone. Those four produce four different tests. The first can be satisfied with broad coverage. The last wants depth on one path and forensic care.

Timeboxing, and the honest bit about it

Every penetration test is a fixed window. That means the result is never a statement that your system is secure. It is a statement that within the agreed scope, using the agreed methods, within the agreed number of days, this is what a competent attacker got. Anybody selling you the first statement is selling something that does not exist.

The practical consequence is that scope size and window length have to be argued about honestly at the start. Fifteen distinct applications and five days is not a penetration test, it is a tour. We would rather test four of them properly and tell you the other eleven were not covered than produce a document that implies coverage nobody achieved. The report carries an explicit section listing what was not tested and why, and that section is one of the more useful pages in it.

Third parties, and the permissions you do not own

Scope frequently includes something you do not control. A payment gateway. A managed database. An authentication provider. A partner API. You cannot authorise testing against systems that belong to somebody else, and neither can we. Those come out of scope, or they get separate written permission from the owner, and there is no third option.

Cloud providers are their own category. AWS, Azure and Google Cloud each publish a customer penetration testing policy covering what you may test against your own resources without telling them and what still requires a submitted form, and those policies change. We check the current version at scoping rather than working from what was true last year. Managed platform layers, meaning the provider's own control plane rather than your workload, are almost never yours to test.

Rules of Engagement and the Authorisation Letter

We do not start without written permission. Not because it is a formality we have to satisfy, but because the exact activity we are being paid for is, without that permission, a criminal offence in most of the jurisdictions our clients sit in. The UK has the Computer Misuse Act. The United States has the Computer Fraud and Abuse Act and a patchwork of state statutes. India has the Information Technology Act. Australia, Canada and New Zealand each have their own equivalents. The specifics are your counsel's territory rather than ours, and we will tell you that rather than pretending otherwise, but the operating rule is simple and absolute.

Who has to sign

Somebody with actual authority over the systems in scope. Not the engineer who invited us, unless that engineer also owns the systems. On a larger organisation this usually means a named executive or the person accountable for the platform, and it frequently takes longer to obtain than the client expects, which is why we raise it in the first conversation rather than the week before testing.

Where the target is hosted or operated by somebody else, that party signs too, separately. Where the data in the environment belongs to your customers, you confirm in writing that exposing it to a tester is something you are entitled to do. This is a question we ask rather than assume, and occasionally the answer sends us to a sanitised environment instead.

What the rules of engagement document actually contains

A short document, agreed by both sides, that answers the questions people otherwise argue about at two in the morning. Precisely which assets are in scope and which are explicitly excluded. The testing window, including whether weekend or overnight testing is permitted. The source addresses our traffic will come from, shared in advance so your monitoring team can distinguish us from a genuine intrusion. Named emergency contacts on both sides with out of band details, because if we take something down the escalation path cannot depend on the thing we took down.

Then the technique boundaries. Denial of service testing in or out. Automated fuzzing at what rate. Whether we may attempt password guessing against live accounts and what lockout policy exists, because an unthinking credential attack that locks out three hundred real users on a Tuesday morning is an incident we caused. Whether we may pivot into internal networks on success, and how far. Whether social engineering against your staff is permitted, which is a different conversation involving your HR position and local employment law.

Finally, the data rules. What we may extract as proof and what we must not, how evidence is stored and encrypted while the engagement runs, who on our side has access, and what happens to it afterwards. Retention and destruction terms are agreed in writing before testing starts rather than assumed.

Announced or unannounced

A decision worth making deliberately. If your security operations team knows the test is happening, you get maximum testing efficiency because nothing gets blocked mid-engagement and no incident bridge gets opened over our traffic. If they do not know, you also get a free measurement of whether they notice, which is genuinely valuable information, at the cost of some wasted effort and a real risk of somebody's weekend being ruined.

The middle path most teams settle on is that one or two people know, they hold the authorisation letter and our source addresses, and the wider team does not. If detection is what you actually want to measure, though, you want a red team exercise rather than a penetration test, and that distinction is covered further down this page.

The WAF question

Almost nobody decides this in advance and it changes results substantially. If we test through your web application firewall, we are testing the combination of the firewall and the application, and a finding that gets blocked at the edge may be reported as low risk while the underlying flaw is untouched. If we test with our source addresses allowlisted past it, we are testing the application on its own merits and finding what is actually in the code.

Our preference on most engagements is to do both, sequentially, and report separately. First unfiltered, to learn what the application does when nothing protects it. Then filtered, to see what the edge genuinely stops. The gap between those two lists is the honest measure of how much of your security posture is a rented product rather than your code.

Black Box, Grey Box or White Box: Which One Should You Actually Buy?

This choice determines how much of your fixed window gets spent on discovery rather than on attack, and most buyers pick the option that sounds most rigorous rather than the one that returns the most findings.

Black box, and why it is usually a waste of your money

The tester gets a domain name and nothing else. It sounds like the purest simulation of a real attacker, and it is, in one narrow respect: it measures what somebody with no inside knowledge can find from outside. That is a legitimate question if your genuine worry is your external perimeter.

The problem is arithmetic. A real attacker has unlimited time and no contract. Your tester has five days. Spending two of them reconstructing information you could have handed over in an email means the deep application testing gets one day instead of three. The reports that come out of black box engagements against modern SaaS are consistently thinner, and they are thin in the area that matters most, because everything interesting is behind a login the tester was never given.

Where it earns its place: testing a merger target where you genuinely do not have internal access, or measuring exposure ahead of a specific threat you are worried about, or as a short adjunct at the front of a longer grey box engagement.

Grey box, the default and the right answer most of the time

The tester gets working credentials at every privilege level, at least two accounts at each level, a rough architecture description and the API documentation if it exists. No source code. Then they attack.

This is where the serious findings live, because the serious findings in modern applications are authorisation failures, and you cannot test authorisation without being authorised as somebody. Broken object level authorisation, horizontal movement between tenants, a support role that can quietly perform an administrative action, a token that survives a permission downgrade. All of that requires accounts. All of it is invisible to a black box tester.

The mental model that helps: grey box does not simulate an anonymous internet attacker. It simulates the attacker who has already signed up for a free trial, or phished one low privilege employee, or bought one set of credentials from a broker. That attacker is far more common than the one who breaks in through the front door.

White box, when depth beats realism

Source code, architecture diagrams, infrastructure configuration, sometimes a walkthrough with the developer who wrote the tricky part. The tester reads and attacks in parallel, using the code to find where the interesting logic is and the running system to prove it is exploitable.

It finds the most per day of anything on this list. It is the right choice when you are testing something high stakes and small, a payments flow, an authentication service, a piece of cryptography, or when you need assurance rather than a simulation. It also produces the most immediately actionable remediation guidance, because the finding can name the file and the function rather than the endpoint.

Where it is wrong: as your only ever test. Reading code creates blind spots of its own, since a reviewer tends to test the paths the code implies and miss the ones that only exist because two components were configured inconsistently in production. Alternate the styles across years rather than picking one forever.

A rough recommendation

If you are buying one test this year for a customer-facing product, buy grey box against production or a faithful production clone, with two accounts per role, and add a short unauthenticated pass at the start for perimeter coverage. If you are shipping something where a failure is catastrophic and narrow, buy white box on that component specifically. If your board is asking about exposure to an untargeted attacker, black box answers that question and nothing else.

Methodology: OWASP WSTG, PTES and the Standards That Actually Get Used

Methodology is what stops a penetration test being one person's habits. Two testers of similar ability will find different things; a documented methodology narrows that gap and makes the report auditable. When your customer's security team asks how the test was conducted, the answer needs to be a named standard and a checklist rather than a description of somebody's instincts.

OWASP Web Security Testing Guide

The WSTG is the working checklist for web application testing, and it is the one we run against by default for anything browser-facing. It is organised into categories that map onto how applications actually fail: information gathering, configuration and deployment management, identity management, authentication, authorisation, session management, input validation, error handling, cryptography, business logic and client-side testing.

Its value is coverage rather than insight. Working through it stops the ordinary embarrassments, meaning the session token that never expires, the password reset link that stays valid after use, the CORS policy that reflects any origin with credentials enabled. It will not find the clever chain on its own. It is the floor, not the ceiling, and a tester who only produces WSTG checklist items has not really tested anything.

PTES, for the shape of the engagement

The Penetration Testing Execution Standard describes the engagement rather than the checks: pre-engagement interactions, intelligence gathering, threat modelling, vulnerability analysis, exploitation, post-exploitation and reporting. Seven phases, and the two most commonly skipped are the first and the third.

Threat modelling before exploitation is the phase that separates a productive test from a scattershot one. Half a day spent working out what an attacker would actually want from this system, which assets are worth money, which roles are worth becoming, tells you where to spend the remaining four days. Testing every endpoint equally is how you run out of time before reaching the payment flow.

OWASP ASVS, when you want a level rather than a list

The Application Security Verification Standard turns security into graded requirements across three levels, from a baseline appropriate to most applications up to a level intended for systems handling the highest value transactions. It is a verification standard rather than a testing methodology, which makes it useful in a different way: it gives you and your customer a shared vocabulary for how much assurance was actually obtained.

We use it where the driver is a contractual or procurement requirement, because a statement that an application was verified against a named ASVS level communicates far more than a count of findings. It also gives your engineering team a target to build against between tests rather than a backlog to react to.

The others, and when each is right

The OWASP API Security Top 10 is the reference for anything where the client is not a browser, and its top entries are dominated by authorisation failures rather than injection, which tells you where to look. The OWASP Mobile Application Security Testing Guide and its verification standard cover mobile builds properly, including the parts people forget such as local data storage, certificate pinning and what happens to the application when the device is rooted. NIST Special Publication 800-115 is a technical guide to information security testing that procurement teams in regulated sectors often reference by name. OSSTMM offers a more measurement-focused approach for infrastructure and physical testing.

Threat behaviour gets described with MITRE ATT&CK, which is more useful in post-exploitation reporting than in web application findings, because it lets your defensive team map what we did onto techniques their tooling claims to detect. Findings get classified with CWE identifiers, which matters more than it sounds: CWE-639 tells your developer this is an authorisation failure through a user-controlled key, whereas the phrase insecure direct object reference has been used to mean four different things over the years.

None of these standards replace judgement. They stop you missing the obvious and they make the engagement defensible. The findings that actually change your risk position come from a person who understood your business well enough to know what a bad day looks like for you.

Reconnaissance, Enumeration and the Boring Work That Decides Everything

Attack surface discovery is unglamorous and it is where a large share of serious findings originate. Not because the technique is clever, but because organisations lose track of what they have exposed, and the forgotten thing is almost always the vulnerable thing.

What we look for outside the application

Subdomain enumeration first, using passive sources and certificate transparency logs before touching your infrastructure at all. Amass, subfinder and a pass over certificate transparency data typically surface hosts that are not on the asset list the client provided, and those hosts are disproportionately interesting: the staging environment somebody exposed to fix an urgent bug in 2023, the old marketing site running an unmaintained CMS, the internal tool that got a public DNS record for convenience.

Then resolution and triage with httpx to find what is actually alive, what redirects where, what TLS certificates are attached, what server headers are being advertised. Then port scanning with nmap against what is in scope, tuned to your rules of engagement rather than run at default aggression, because an unthrottled scan against a fragile appliance is a way to cause an incident on day one.

Dangling DNS deserves its own mention. A CNAME pointing at a cloud service that no longer exists can often be claimed by whoever registers that service name next, which hands somebody a subdomain of yours to host content on. It costs an attacker nothing and it undermines every cookie scoped to your parent domain. We check for it on every engagement and find it more often than anyone expects.

Content and endpoint discovery

Directory and file discovery with ffuf or feroxbuster against sensible wordlists, looking for administrative interfaces, backup files, version control directories that were deployed by accident, configuration files and old API versions still routed but no longer maintained. Deprecated API versions are a recurring theme: v1 stays online because one mobile client still calls it, nobody has applied the authorisation fixes that went into v2, and it is entirely undocumented.

For APIs, the specification is the map when one exists. An OpenAPI document, a Postman collection or a GraphQL introspection response turns hours of guessing into a complete endpoint list. Where introspection is disabled in production, which it should be, we work from client traffic instead. Our API testing services in India page covers the functional and contract side of that work; here we care about which endpoints exist that nobody documented.

Client-side JavaScript is a reliable source of secrets in the loose sense. Bundled front ends routinely contain the full list of API routes, feature flags naming unreleased functionality, role names, internal hostnames and occasionally keys that somebody assumed were safe because the bundle is minified. Reading the bundle properly is an hour that repays itself often.

The human and organisational layer

Public code repositories, package registries and paste sites get checked for material that belongs to you. A developer's personal repository with a config file. An internal package published publicly by accident. Credentials in a commit that was reverted but never rotated, which is the same mistake described on our security testing page and no less common for being well known.

Where phishing and pretexting are in scope, which is a separate decision with employment law consequences, the same reconnaissance identifies who to target and what would be convincing. Where they are not in scope, we still note the exposure, because a report that identifies which of your staff are trivially impersonable is useful even when nobody attempted it.

Exploitation, and the Lines We Do Not Cross

Exploitation is where a suspected weakness becomes a proven one. Until something is exploited it is a theory, and theories get argued about in remediation meetings until somebody decides the risk is acceptable. Proof ends that argument in ten seconds.

The working toolkit, and where the judgement sits

Burp Suite Professional carries most web application work, and the parts that matter are the unglamorous ones. Repeater for hand-crafting a request forty times in a row. Intruder and Turbo Intruder for controlled parallelism when testing race conditions. The Autorize extension for replaying every request as a second, lower privileged user and flagging the ones that still succeed, which finds authorisation gaps faster than any other single technique we use. OWASP ZAP covers similar ground and is what we reach for when a client needs the tooling reproducible without a commercial licence.

Beyond that, nuclei for templated checks against known issues at scale, sqlmap once injection is confirmed by hand rather than as a discovery tool, jwt_tool for token manipulation, and Metasploit for a subset of infrastructure work where a reliable public module exists. Naming the tools is the easy part. The judgement is in knowing that sqlmap fired blindly at an application produces noise and occasionally damage, while sqlmap pointed at a parameter a human already confirmed is quiet and precise.

What proof looks like, and what it does not

Proof is the minimum demonstration that establishes impact. For a SQL injection, that is the database version string and a count of rows in a sensitive table, not a dump of the table. For an authorisation flaw, that is a screenshot of one test account reading a second test account's record, with both account identifiers visible. For a server-side request forgery, that is a response from an internal address that should not be reachable.

What proof is not: exfiltrating real customer data to demonstrate that it is exfiltratable. Encrypting anything. Modifying production records. Leaving any artefact behind. If a finding genuinely cannot be proven without crossing one of those lines, it gets written up as unproven with the reasoning, and we ask you whether you want to authorise the step in a controlled way, usually against staging with a specific person watching.

Cleanup as part of the work

Every account created, file uploaded, webshell placed, configuration touched and payload stored is logged as it happens and removed at the end, with the removal confirmed in writing in the report appendix. Test artefacts that outlive the engagement are a genuine hazard: a proof of concept file left in an upload directory is an unauthenticated remote code execution that you now own and did not know about.

The same log serves your incident response team afterwards. When somebody finds an odd entry in an audit trail three weeks later, being able to match it against our timestamped activity record saves a day of panic. We provide that record whether or not anybody asks for it.

Post-Exploitation: Privilege Escalation and Lateral Movement

Getting in is the beginning of the interesting part. What determines actual business impact is what an attacker can reach from that position, and the answer is often startling to teams who assumed a compromised web server was a contained problem.

Vertical escalation inside the application

Once we hold a low privilege account, the question is how to become a higher one. The classic paths are still productive: a role identifier submitted by the client and trusted by the server, a registration endpoint that accepts an unexpected field, an administrative function protected only by the absence of a link in the interface, a JWT whose signature algorithm the server will accept as none if asked politely.

Mass assignment deserves particular attention because modern frameworks make it easy. If your update-profile endpoint binds the whole request body onto the model, adding a field the form never sends may be all it takes. We test every state-changing endpoint against the full attribute set rather than the fields the interface presents, which is exactly the test no functional test suite performs.

Escalation on the host

Where code execution is achieved, the next step is the local one. Misconfigured sudo rules, world-writable service files, credentials in environment variables or on disk, over-permissioned service accounts, container escapes where the container was granted more capability than it needed. On Linux, checks against known local privilege escalation issues in the running kernel where the rules of engagement allow it. On Windows environments, the usual unquoted service paths and token privileges.

Cloud workloads change the shape of this materially. On a compromised instance the most valuable local resource is usually the metadata service, because it hands out temporary credentials for whatever role the instance carries. Whether those credentials matter depends entirely on how tightly the role was written, which is why an over-permissive instance role turns a moderate application flaw into a full account compromise. It is also why we test metadata service configuration on every cloud engagement.

Lateral movement, and why flat networks keep failing

From one host, what else is reachable. Network segmentation gets designed carefully and then eroded by three years of urgent exceptions, and the practical result is that a web server in a supposedly isolated tier can often talk to a database in another, an internal admin panel, a message broker with no authentication, or a Kubernetes API server.

In Windows and Active Directory environments the toolkit is well established: BloodHound to map the relationships between users, groups and machines and find the shortest path to domain administrator, Responder for name resolution poisoning where it is in scope, and the Impacket suite for authenticated movement once credentials are in hand. The finding that lands hardest is rarely a single vulnerability. It is a path diagram showing that a helpdesk account can reach a server that stores a service credential that administers the domain.

In container platforms the equivalent question is what a compromised pod can do. Service account tokens mounted by default, network policies absent so every pod can reach every other pod, secrets available to workloads that do not need them, a cluster role binding that was widened during an outage and never narrowed. Our Kubernetes services in India work covers hardening that configuration properly, and the two engagements pair naturally.

Persistence, only where it is in scope

Whether we demonstrate persistence at all is a scoping decision. Where it is in scope, it is limited, logged and reversed: a scheduled task, an additional key, an API token created through a legitimate feature. The purpose is to test whether your detection notices, and it is one of the few parts of a penetration test that produces information about your defensive capability rather than your attack surface. Where detection is the actual question you want answered, a red team engagement is the better instrument.

Business Logic Flaws That No Scanner Will Ever Find

This is the category that justifies paying for a person. A logic flaw has no signature. The request is well formed, the input validates, the authentication is correct, no library is out of date, and the outcome is still wrong because the application permitted a sequence of legitimate actions that combine into something it should have refused.

How we find them

By learning the business first. Before attacking, we map every workflow that moves money, grants access, changes an entitlement or transitions a record through states. For each step we write down the rule it is supposed to enforce and who is supposed to be able to trigger it. Then the attack is simply an attempt to reach the end state without satisfying the rules along the way.

The manipulations that work are consistent across industries. Skip a step by posting directly to a later endpoint. Repeat a step that was meant to happen once. Reverse a step and check whether its side effects reverse too. Run two requests in parallel to catch a check-then-act gap. Send a negative number, a very large number, a different currency, a value in a unit the developer did not consider. Replay a token issued before a permission was revoked. Change a value the client was never supposed to modify because the server assumed the interface would not let you.

Three shapes we look for on almost every engagement

The first is a discount or credit that can be applied more than once. Checkout flows validate a coupon at application time and then trust that validation at settlement. Fire twenty redemption requests within the same few milliseconds and a single-use code is frequently accepted several times, because the check and the write are not in one transaction. Turbo Intruder exists largely for this test. The fix is almost never more validation; it is a database constraint or an atomic operation, because validation at the application layer cannot win a race against itself.

The second is a workflow state machine that only validates locally. An approval process with four stages where each endpoint checks that its own inputs are valid but not that the previous stage completed. Post the final approval payload directly and the record transitions to approved without ever having been reviewed. This is common in lending, insurance, procurement and anything with an internal sign-off. The fix is to make the transition itself the guarded operation rather than guarding each form.

The third is entitlement drift in multi-tenant products. A user is removed from a workspace, but an existing session token still carries the old claim and remains valid for its full lifetime. Or an account downgrades from a paid tier and the feature flag is enforced in the interface while the underlying API still answers. Both are found the same way: perform the change of state, then replay every request captured before it and see what still works.

Why your test suite will not catch these

Functional tests verify that the application does what it is supposed to do. Logic testing asks whether the application refuses what it is supposed to refuse, and nobody writes that test because nobody thought of the sequence. The gap is structural rather than a sign of a careless team. It is also why these findings tend to be the ones that generate the longest remediation discussion, since the fix is frequently a design change rather than a patch.

Chaining: How Four Low Findings Become One Critical

Scanners report findings individually because that is all they can do. Attackers do not attack individually. The most valuable thing a human tester produces is the chain, and the chain is routinely composed of findings that were each dismissed as informational the previous year.

A chain we look for constantly

Start with a verbose error page. It leaks the framework, the version and an internal hostname. On its own, informational, and every triage process closes it. Next, an unauthenticated monitoring or health endpoint left routed in production, listing internal service names and configuration. Low risk in isolation, and it usually gets a note saying no sensitive data is exposed.

Third, an avatar upload feature that accepts a URL and fetches it server-side. The developer filtered against localhost and 127.0.0.1, which feels responsible. It does not stop an alternate encoding of the loopback address, a DNS name that resolves to an internal address, or an external URL that returns a redirect to one. Medium, at a stretch.

Fourth, the cloud instance metadata endpoint still answering version one requests without a session token requirement. Configuration, not a vulnerability, and it appears on no scanner report as high risk.

Put them together. The error page names the internal host. The health endpoint confirms what runs there. The image fetcher becomes the request forgery primitive. The metadata service hands over the instance role credentials. If that role was written broadly, which is the common case, an attacker now reads your object storage. Four findings, individually rated informational, low, medium and configuration, produce total data loss.

A second one, entirely on the application layer

A user enumeration difference in the password reset response tells you which addresses are registered. Rate limiting exists on the login endpoint but not on the reset endpoint, which is a distinction almost every team makes accidentally. The reset token is generated from a timestamp with insufficient entropy. And the reset flow does not invalidate active sessions. None of those alone would move a risk register. Together they are account takeover at scale, quietly, without a single failed login appearing in your monitoring.

What this means for how you read a report

It means a report that is only a sorted list of individually rated findings has done half the job. Ours carries an attack narrative section that walks the chains explicitly, from initial position to final impact, with the reproduction steps for each link. That section is also the one to hand to a non-technical stakeholder, because it converts a table of jargon into a sentence about what somebody could do to your business.

It also means the triage rule of closing everything rated low is a mistake in a specific and predictable way. Low findings that provide information, a primitive or a foothold are the raw material of every serious breach. We flag which low findings are load-bearing so your team can prioritise those and safely defer the rest.

The Report: Evidence, Reproducibility and Risk That Means Something

The test is the work. The report is the product. A finding your developer cannot reproduce is a finding that gets marked cannot reproduce and closed, and everybody has wasted their money.

What every finding contains

A plain description of what is wrong and why it matters to your business specifically, not a paragraph copied from a vulnerability database. The affected assets, listed precisely. The exact reproduction steps: the request in full, the account used, the timestamp, any prerequisite state, and what the response looked like. Evidence in the form of annotated screenshots or captured traffic, redacted where it contains real data. A risk rating with the reasoning shown rather than asserted. Remediation guidance specific enough to act on, including the pattern to fix rather than only the instance we found.

The reproducibility bar is the one worth being strict about. The test is whether a developer who has never spoken to us can follow the steps and see the same result on a Tuesday morning. If they cannot, the finding is not finished. That standard costs us time during write-up and saves your team considerably more during remediation.

Structure that survives contact with an organisation

An executive summary that a non-technical reader can act on, stating what was tested, what the overall position is and what the two or three things that matter most are. The scope and methodology section, including dates, standards used and what was not tested and why. That last part is the one auditors read first. The attack narrative walking the chains. The detailed findings. Then appendices with the activity log, the cleanup confirmation and any raw tool output worth keeping.

We deliver findings as they are confirmed rather than only at the end. If something critical is found on day one, you hear about it on day one through the agreed escalation contact, not eleven days later when the document is formatted. Anything that suggests an existing compromise rather than a theoretical one stops the test and goes to you immediately.

CVSS, and why it is not the same as your risk

Every finding gets a CVSS score because your customers, auditors and internal processes expect one, and a shared numeric scale is genuinely useful for comparison across tests. But the base score describes a vulnerability in the abstract, on a hypothetical system, with no knowledge of yours. Two findings with an identical 7.5 can differ by an order of magnitude in what they would actually cost you.

So we score twice. The CVSS vector, shown in full so your team can see the assumptions rather than just the number, including the temporal and environmental considerations where they apply. Then a separate business risk rating that accounts for what the affected asset holds, whether it is internet-facing, how many customers are affected, what regulatory exposure follows, and how hard the attack actually is to execute given your specific controls.

The gap between those two ratings is where the useful conversation happens. A 9.8 on an internal service reachable only from a network segment that six people can enter may deserve to sit behind a 6.5 on your public sign-up flow. Reporting only the first number tells your team to fix the wrong thing first, and doing that repeatedly is how security teams lose credibility with engineering.

Where a finding maps to something under active exploitation in the wild, we say so and cite the source rather than leaving you to work it out. A moderate score on something being exploited today outranks a critical that nobody has ever used.

Remediation Support and Retesting

A report that goes into a folder has changed nothing. The part of the engagement that produces actual risk reduction happens after delivery, and it is the part most commonly left undefined.

The walkthrough

A live session with your engineers, not a document handover. We go through the findings that matter, answer the question of whether this is really exploitable in front of the people who will argue about it, and help sort the list into fix now, fix this quarter, accept with a stated reason. Half the value is in the arguments: a developer who understands why a finding is real fixes the pattern, while one who is handed a ticket fixes the single instance.

During remediation we stay reachable for the specific questions that come up, because they always do. Is this the right fix. Does this framework setting close it properly. We found six more places with the same pattern, do they all count. That last question is the one that indicates the engagement worked.

How retesting actually works

Retesting re-runs the exact reproduction steps from each finding, then probes around the fix rather than only at it. This matters more than it sounds. The frequent failure is a patch that blocks the specific payload in the report while leaving the underlying pattern in place, so the same flaw is reachable through a slightly different route. A retest that only replays the original request will pass it.

We also check for regression introduced by the fixes themselves, since rushed security patches break things, and we look at whether the fix was applied to every instance of the pattern or only the one we happened to demonstrate. The output is an updated report marking each finding as fixed, partially fixed or open, with fresh evidence either way. Scope, window and depth of the retest are set in the statement of work before testing begins rather than negotiated once you have a list of problems.

Turning findings into things that stay fixed

The most durable outcome from a test is not the fixes. It is the checks that stop the same class of bug returning. An authorisation flaw becomes an automated test in your suite that asserts user A gets a 403 on user B's resource, running on every merge forever. A dangerous framework pattern becomes a custom static analysis rule. A misconfiguration becomes an infrastructure test. That handoff is where a penetration test connects to the continuous work described on our security testing page, and it is the difference between an annual event and an improving system.

Web, API, Network, Cloud and Mobile: What Changes Per Target

The methodology holds across targets. What changes is where the interesting failures live, and scoping a cloud review as though it were a web application test is a common way to buy the wrong thing.

Web applications

The bulk of most engagements. Authentication and session handling, authorisation across roles and tenants, input handling at every trust boundary, business logic, file handling, client-side issues including cross-site scripting that survives the actual template layer and content security policy that is present but permissive enough to be decorative. Single-page front ends move much of the interesting surface into the API behind them, so a modern web test is usually an API test with a browser attached.

APIs

Authorisation dominates. Object level checks on every endpoint that takes an identifier, function level checks on every administrative operation, and property level checks because an endpoint that returns the whole object including fields the interface never shows is a quiet data leak. Beyond that: mass assignment, rate limiting and resource consumption, deprecated versions still routed, inconsistent enforcement between the gateway and the service behind it. GraphQL brings its own set, including introspection left enabled, deeply nested queries as a denial of service vector, and batching used to bypass rate limits that count requests rather than operations.

Network and infrastructure

External infrastructure testing looks at what is exposed, what versions are running, what authenticates and what does not. Internal testing, which usually starts from an assumed foothold, looks at segmentation, service authentication, credential reuse across hosts, and in Windows estates the Active Directory relationship graph. The recurring finding is not a vulnerable service. It is that the network is flatter than the architecture diagram claims.

Cloud configuration

Identity is the perimeter here, so identity is where the review concentrates: over-permissive roles, wildcard policies, trust relationships that allow assumption from unexpected accounts, long-lived access keys that should have been federated credentials, and the absence of boundaries around what a compromised workload can request. Then storage exposure, network controls, key management, and whether audit logging is enabled everywhere and actually retained. Tooling such as ScoutSuite and Prowler gives the configuration baseline quickly; the human work is the exploitation path from a foothold to the data. Identity design across your estate is covered by our identity and access management work.

Mobile applications

Both halves matter and clients usually scope only one. On the device: what is stored in local databases, preferences and caches, whether certificate pinning is implemented and how easily it is bypassed with a hooking framework, what the application does when the device is rooted or jailbroken, what leaks into logs and screenshots. On the server: the API the application talks to, which is where the real risk lives and which is often less protected than the web equivalent because the team assumed the mobile client was the only consumer.

Three Situations We Get Called Into

Different reasons for buying a test produce genuinely different engagements. These three cover most of what arrives.

The enterprise deal that stalled on a security questionnaire

A growing SaaS product is close to signing its largest customer, and procurement has asked for an independent penetration test report before the contract moves. The deadline is short and the temptation is to buy the cheapest thing that produces a PDF.

The launch of something that handles money

A team is about to ship payments, payouts, credits or a marketplace settlement flow. Nothing is known to be wrong. The concern is that the failure mode is financial and irreversible, and that no internal reviewer has looked at it with an attacker's intent.

The system that was inherited

An application arrives through acquisition or through the departure of the team that built it. Nobody currently employed knows what it exposes. Documentation is stale, the dependency tree has not moved in three years, and somebody needs a defensible answer about exposure.

What goes wrong in the questionnaire case, and what the fix looks like

The failure is buying a scan with a cover page. The customer's security team reads it, sees no reproduction steps and no evidence of manual testing, and asks for a real one, which costs a second fee and another three weeks against a deal deadline. The second failure is scoping to the marketing site because it is easy, when the customer cares about the multi-tenant application holding their data.

What works is a grey box test against the actual product with two accounts per role, run against the standards your customer's questionnaire names, with an executive summary written to be read by a stranger. The findings that emerge are almost always tenant isolation issues rather than the injection flaws people expect, and those are precisely what the customer's security team was worried about.

What goes wrong in the payments case, and what the fix looks like

Money flows fail on logic, not on injection. Refunds that can be issued twice through parallel requests. A currency or unit assumption that lets a value be submitted in a denomination the server did not expect. A webhook from the payment provider whose signature is not verified, so anybody who learns the endpoint can announce that a payment succeeded. A settlement job that trusts an amount recalculated client-side.

The right shape here is white box on the flow specifically, with the developer who wrote it available for an hour, plus deliberate race condition testing on every state transition that touches a balance. The fixes are usually database constraints, idempotency keys and moving the guard onto the transition rather than the form. If the environment falls under a card industry requirement, scope and evidence expectations are set with your assessor rather than by us.

What goes wrong with an inherited system, and what the fix looks like

The instinct is to run a scanner, receive a four-figure finding count and conclude the system is beyond saving. That number is not information. It contains the same misconfiguration repeated across two hundred endpoints, plus hundreds of dependency advisories in code paths nothing ever calls.

What works is discovery first, since the asset list you were given is wrong, followed by a grey box test focused on one question: what can somebody reach from the internet, and what can they reach from there. The output is a short ranked list of what is genuinely exploitable and a map of the attack surface nobody had. Where the fixes need hands on a legacy codebase, we can put engineers on it directly, for example through our PHP developers in India, so remediation does not stall waiting for a team that no longer exists.

How Does a Penetration Testing Team in India Work Across Your Timezone?

This gets asked in the first call and it deserves an honest answer rather than a claim about follow-the-sun coverage.

The real overlap numbers

A standard working day here runs 09:30 to 18:30 IST. Against the UK that gives roughly four hours of live overlap in your morning. Against continental Europe, a little more. Against the Australian east coast, about four hours in your afternoon, and New Zealand is tighter still at the edges. Against US Eastern time it gives you almost nothing, perhaps the first half hour of your day. Against US Pacific, effectively zero.

Where the overlap is genuinely too small, the answer is a shifted rota rather than a promise. A team working 13:00 to 22:00 IST buys a US Eastern client about three and a half hours of proper overlap. That is a real option and it has a real cost, in coordination and in the fact that a shifted schedule is harder to staff consistently, so it is agreed with you before the engagement rather than assumed. We will not tell you that continuous coverage is free.

Why testing tolerates low overlap better than most work

The execution phase does not need you awake. Testing is solitary work against systems that are running whether or not anybody is at their desk, and there is a reasonable argument that a tester working while your traffic is at its lowest is safer for you. What does need synchronous time is a smaller and more predictable set: the scoping conversation, the kick-off confirming access works, any live escalation, and the findings walkthrough at the end. Four meetings, scheduled in advance, inside whatever window we agree.

Everything else runs written-first. A daily status note covering what was tested, what was found, what is planned next and anything blocking, delivered before your morning. Findings raised in a shared tracker as they are confirmed rather than held back. Critical findings escalated immediately through an agreed out of band contact, which is the one path that must not wait for a working day on either side.

The talent question, answered honestly

India has a deep offensive security community, visible in bug bounty leaderboards, CVE credits and the research presented at conferences here. It also has a large volume of people who have completed a course and never tested a live system, which is why the market is genuinely hard to buy from if you cannot assess capability yourself.

We are not going to make a claim about credentials on a marketing page. What we will do is let you assess the work directly before committing: ask to see a redacted report from a comparable engagement, ask who specifically will run your test and what they have worked on, and ask them to talk you through a chain they built. A tester who can explain how four low findings became a critical, in their own words, is demonstrating something no certificate demonstrates. That is the conversation we would want if we were buying this, so it is the one we offer.

What Goes Wrong During Engagements, and How We Handle It

Penetration tests fail in predictable ways. Most of the failures are logistical rather than technical, and naming them in advance is how they get avoided.

Access is not ready on day one

The most common cause of a wasted day. Credentials do not work, the VPN certificate was issued for the wrong person, the test accounts lack the roles they were supposed to have, the environment is down. We verify every piece of access two working days before the window opens, run a scripted connectivity check, and treat a failure at that point as a scheduling conversation rather than something to absorb quietly.

The environment turns out not to represent production

Sometimes only discovered mid-test. Staging has a different identity provider, no rate limiting, a stubbed payment integration and a database with fourteen rows. We raise it immediately rather than at the end, because you may be able to fix the gap in a day, and the report states explicitly which findings are environment-specific and which conclusions could not be drawn.

We break something anyway

It happens even with care, usually on a fragile appliance or an under-resourced staging box. The response is defined before we start: stop the activity, notify the agreed contact immediately through the out of band channel, provide the exact request that caused it, and assist with recovery. What we do not do is continue and mention it in the report. The incident and its cause both go in the document.

A finding is disputed

Someone says it is not exploitable, or it is by design, or it is mitigated by a control elsewhere. Sometimes they are right, which is why every finding carries full reproduction steps rather than an assertion. Where a compensating control is claimed, we test the control rather than accepting or rejecting the claim, and the report records the disagreement and the evidence on both sides if it is not resolved. Deleting a disputed finding to keep everyone comfortable would make the whole document untrustworthy.

Real compromise is discovered

Occasionally a test finds evidence that somebody else has already been there. A webshell that is not ours. Log entries that do not match our activity record. Accounts nobody recognises. This stops the engagement. It goes to your escalation contact immediately, we hand over everything we have with timestamps, and we preserve rather than disturb what we found. Continuing to test through somebody else's incident contaminates the evidence and is the wrong instinct.

Nothing significant is found

Worth planning for. Sometimes the honest answer is that the application held up. The failure mode is the pressure to pad the report with severity inflation so the invoice feels justified, which is common enough in this industry that buyers should watch for it. A thin findings list gets reported as a thin findings list, with the coverage evidence to back it up, and the recommendation is usually to widen scope or go deeper on a specific component next time rather than repeat the same test.

Pen Test, Red Team, Purple Team or Bug Bounty: Which Do You Need?

These four get used interchangeably by people selling them, and buying the wrong one wastes both money and the appetite your organisation has for this kind of work.

Penetration test

A defined scope, a defined window, maximum coverage of that scope, findings documented for remediation. Your team usually knows it is happening. It answers the question of how much of this specific thing is breakable. This is the right purchase for the large majority of organisations, and it stays the right purchase until it stops producing meaningful findings.

Red team

Objective-based, stealth-oriented, broad scope, and aimed at your defenders rather than your code. The question is not what vulnerabilities exist; it is whether your monitoring, alerting and response actually work when somebody is deliberately trying to avoid them. It is more expensive, produces far fewer findings, and is close to worthless if a penetration test would still surface straightforward issues, because it will simply reach the objective through the front door and tell you nothing new.

The prerequisite is a defensive capability worth measuring. If you have no security monitoring, a red team exercise measures the absence of something you already know is absent.

Purple team

Attack and defence in the same room, working through techniques collaboratively and checking in real time whether each one is detected. Less a test than a training and tuning exercise. It is the highest-value option for a team that has detection tooling and wants to know how much of it actually fires, and it improves your defensive posture faster than an adversarial exercise because the feedback loop is minutes rather than weeks.

Bug bounty

Continuous, broad, driven by many people, paid per valid finding. Excellent for breadth and for the long tail nobody would have thought to look for. Poor for coverage assurance, because you cannot direct where the effort goes and you cannot prove anything was examined. It also carries an operational load people underestimate, since somebody has to triage a stream of submissions of wildly varying quality every week.

A bounty complements a penetration test rather than replacing it. If somebody asks whether your payment flow was tested, a bounty programme cannot answer, and no auditor will accept it as evidence that it was.

Engagement Models

Single scoped test

One target, one window, one report, plus the findings walkthrough and a retest agreed in the statement of work. The usual starting point, and the right one when the driver is a specific launch, a customer requirement or an inherited system nobody understands. Scope, standards and window are fixed in writing before anything begins.

Recurring programme

Testing on an agreed cadence across a portfolio, with the scope rotating so the same surfaces are not tested repeatedly while others are never covered. Findings are tracked across cycles so you can see whether classes of issue are actually disappearing. Suits organisations shipping continuously where an annual snapshot has stopped being meaningful.

Embedded security engineers

Offensive-minded engineers working inside your team on an ongoing basis: threat modelling new features before they are built, testing changes as they ship, and building the automated checks that stop findings recurring. Composition and duration are agreed with you before starting. This is where testing stops being an event.

Most relationships start with a single test, because it is the cheapest way for both sides to find out whether the working relationship is any good. What it should never be is the only thing that ever happens, since an annual test against a codebase that changes weekly is a snapshot of a system that no longer exists by the time the report is read.

Where This Sits Alongside Our Other Work

A penetration test is one instrument. It works best when the things it finds have somewhere to go.

The continuous, automated half of application security, meaning static analysis on pull requests, dependency and secrets scanning, and authorisation tests that run on every merge, is covered by our security testing work. Broader programme-level questions, architecture review and defensive design sit with our cybersecurity services. Where the findings concentrate on identity, roles and token handling, our identity and access management work is where the redesign happens. Where they concentrate on the container platform, our Kubernetes engagement covers cluster hardening properly. And where remediation needs hands rather than advice, we can put engineers directly on the codebase.

The sequence we would suggest to most teams, if asked: fix the reproducibility and dependency basics first, get automated checks running so new bugs stop arriving, then buy a test to find what the automation structurally cannot see. Testing a codebase that has never had a static analyser pointed at it means paying a human to find things a machine would have found for nothing.

Frequently Asked Questions About Penetration Testing in India

What is the difference between a penetration test and a vulnerability scan?

A scan compares what it observes against a database of known issues and produces a list. A penetration test puts a person in front of your system who is trying to achieve something: read another customer's data, escalate to administrator, reach the internal network. The scanner tells you a component is out of date. The test tells you that the out of date component, combined with a permissive CORS policy and a predictable identifier, lets somebody empty an account.

Do you need written authorisation before testing, and who has to sign it?

Yes, always, and nothing starts without it. The signature has to come from somebody with authority over the systems in scope, not from the engineer who invited us. Where a target is hosted, operated or owned by a third party, that party has to agree separately. We also ask you to confirm in writing that the accounts and data we will touch are yours to expose. This is not paperwork for its own sake; unauthorised testing is a criminal matter in most of the countries our clients operate in.

Should we choose black box, grey box or white box testing?

Grey box for most engagements. Black box spends a large share of a fixed timebox rediscovering things you already know, and the result is a report about your perimeter rather than your application. White box, with source access and architecture documents, finds the most per day but reads less like a real attack. Grey box gives the tester working credentials at each role level and a rough map, then lets them attack. That is where the authorisation flaws live.

Will the test take our production system down?

It should not, and the rules of engagement exist to make sure of it. Denial of service testing, destructive payloads and mass automated fuzzing against production are excluded unless you explicitly ask for them in writing. Source addresses are shared with you in advance so your team can tell our traffic from real attacks, an abort contact is agreed on both sides, and anything genuinely risky is either run against staging or scheduled inside a window you choose.

How do you test business logic flaws that tools cannot find?

By learning what the application is for before attacking it. We map the workflows that move money, grant access or change state, write down the rule each step is supposed to enforce, then try to reach the end state without satisfying the rule. Skip a step, repeat a step, run two requests in parallel, replay a token after a role change. No pattern matcher can do this because the requests are all perfectly well formed.

Do you retest after we fix the findings?

Retesting is part of how we scope the work, and the window and depth are agreed in the statement of work before testing starts rather than negotiated afterwards. A retest re-runs the exact reproduction steps from each finding and then probes around the fix, because a patch that blocks one payload while leaving the underlying pattern in place is common. You get an updated report showing each finding as fixed, partially fixed or still open.

Is a penetration test the same as a red team engagement?

No. A penetration test measures how much of a defined scope is breakable in a defined window, with your team usually aware it is happening. A red team engagement measures whether your detection and response actually work, using stealth against an unaware defensive team and often a much wider scope. Red teaming is the wrong purchase until pen tests have stopped surfacing straightforward findings, because it will simply confirm what you already knew.

How does a penetration testing team in India work across our timezone?

A 09:30 to 18:30 IST day gives a UK team about four hours of live overlap, an Australian east coast team about four in their afternoon, and a US East Coast team almost none. So we agree the pattern before booking. Testing itself does not need you awake, but scoping, the kick off, any live escalation and the findings walkthrough do, and those get scheduled inside whatever window we agree with you.

Tell Us What You Want Broken

Send us the target, the reason you are testing it and the deadline you are working to. We will come back with a scope we think is honest, including the parts we would leave out and why, before anybody talks about a window.

Start the Conversation