05.04 / 65 min

Test path traversal, LFI, and XXE

Exercise filesystem normalization and external-entity controls without accessing a real system file or network service.

By the endDetect traversal evidenceInspect XML parser behaviorAvoid unsafe external effects
Controlled exercise

Use only the Academy Lab on 127.0.0.1:5177. Do not copy these tests to a public system without explicit written authorization.

01

Prove the target boundary

Create or reopen the Academy Lab project and send GET /health. Continue only when the target is 127.0.0.1 and local_only is true. The public-recon lessons require a separately authorized target and are never run against an unrelated domain.

GET http://127.0.0.1:5177/health
Expected result

200 with "local_only": true.

02

Test the file boundary

Start with welcome.txt, then use the documented traversal marker. The lab returns simulated passwd content; it never reads the host filesystem.

GET /files-insecure?name=..%2F..%2F..%2F..%2Fetc%2Fpasswd
Expected result

Secure returns 400; insecure returns the synthetic root:x marker.

03

Send a safe XML entity

Use the local callback URL in the entity declaration. Keep the entity small and never reference a cloud metadata service or real file.

POST /xml-insecure
<!DOCTYPE x [<!ENTITY p SYSTEM "http://127.0.0.1:5177/oast/callback/xxe">]><x>&p;</x>
Expected result

Secure rejects DOCTYPE; insecure exposes a parser/OAST signal.

04

Review local OAST

Open /oast/interactions and confirm source xxe. The lab records the intention locally and performs no outbound request.

05

Separate LFI from XXE

Store file-path and XML-parser evidence in separate findings. A common marker does not make them the same vulnerability class.

MASTERY CHECKPOINT

Prove it before moving on.

You can reproduce one traversal signal and one XXE signal without reading or contacting anything outside the lab.