road23 2022. 7. 17. 22:18

HTML Injection – reflected (GET)

HTML Injection – stored (Blog)


Quest. 분명 당신은 검색 창에 아무 의미도 없는 값을 입력했습니다. 하지만 burp suite라는 취약점 분석 도구를 통해 아래의 유의미한 결과를 출력할 수 있게 되었습니다. 이 도구를 통해 아무 값을 입력하여 아래 두 번째 사진과 같이 출력하세요.

 

  • 난이도 low

hint1. GET 방식과 다르게 POST 방식은 전송되는 변수 값이 보이지 않습니다. 하지만 burp suite를 이용한다면 클라이언트에서 서버로 전송되는 값이 모두 보입니다. 이걸 이용하여 값을 조작해봅시다.

 

<h1>SUCCESS</h1>

<img src=http://192.168.37.128/bWAPP/images/bee_1.png>

태그 입력


  • 난이도 medium

-hint1. 페이지 소스 코드를 확인해봅시다.

<p>Enter your first and last name:</p>

    <form action="/bWAPP/htmli_post.php" method="POST">

        <p><label for="firstname">First name:</label><br />

        <input type="text" id="firstname" name="firstname"></p>

 

        <p><label for="lastname">Last name:</label><br />

        <input type="text" id="lastname" name="lastname"></p>

 

        <button type="submit" name="form" value="submit">Go</button> 

    </form>

우리는 form의 정보가 htmli_post.php로 전달됨을 알 수 있습니다.

-hint2. htmli_post.php 파일에 include("functions_external.php");라는 코드가 있습니다.

         일부 함수를 functions_external.php 파일에 저장하는 듯 합니다.

-hint3. <과 >을 인코딩 했는데도 여전히 풀리지 않습니다. 더블 인코딩에 대해 알아봐야 할 것 같습니다.

터미널에  cd /var/www/bAWPP을 입력한 후 vim htnli_get.php을 입력한다.

인코딩 되어있기 때문에 더블인코딩을 해주면 된다.


  • 난이도 high – 풀 수 없는 이유를 설명하세요.

hint1. 서버에서 변수를 처리할 때 값을 조작하는 것 같습니다. php 파일을 살펴보면서 변수가 전달되는 과정을 지켜보면 답이 나올 듯 합니다.

 

post는 htmlspecialchars함수를 사용하기 때문에 high를 풀 수 없다.


Quest. HTML Injection stored이 무엇인지 간단하게 정리하시오.

 공격자가 서버에 태그/스크립트를 저장시켜, 클라이언트가 게시판을 읽을 경우 태그/스크립트가 실행되는 방식이다. 웹-게시판에 공격자가 인젝션한 코드를 사용자들이 실행되게 한다.


Quest. 문제 페이지에 코드를 삽입하여 아래와 같이 이전 QUEST인 html injection - reflected (POST)를 해결하세요.

 

  • 난이도 low

 hint1. 우리가 배운 범위 내에서 해결할 수 있습니다.

hint2. form 태그를 사용해보세요.

hint3. form 태그를 이용해 reflected (POST) 문제 페이지로 전송해보세요.

bee를 입력하면 아래에 entry가 생기는 것을 확인할 수 있다.

<h1>SUCCESS</h1>

<img src="./images/bee_1.png">

를 입력하면 위와 같은 entry에 표시되는 것을 확인할 수 있다.

<form method="POST" action="/bWAPP/htmli_post.php">
	<p>
		<label for="firstname">First name:</label>
		<br>
		<input id="firstname" type="text" name="firstname">
	</p>
	<p>
		<label for="lastname">Last name:</label>
		<br>
		<input id="lastname" type="text" name="lastname">
	</p>
	<button value="submit" name="form" type="submit">Go</button>
</form>

form태그를 입력창에 입력하면 아래와 같이 entry가 입력되는 것을 확인할 수 있다.

위의 사진처럼 뜨는 entry에서 first  name에 <h1>SUCCESS</h1>을 입력하고, last name에 <img src="./images/bee_1.png">를 입력하면 아래와 같은 화면이 나온다.


  • 난이도 medium – 풀 수 없는 이유를 설명하세요.

 hint1. 서버에서 변수를 처리할 때 값을 조작하는 것 같습니다. php 파일을 살펴보면서 변수가 전달되는 과정을 지켜보면 답이 나올 듯 합니다.

 

<form method="POST" action="/bWAPP/htmli_post.php">
	<p>
		<label for="firstname">First name:</label>
		<br>
		<input id="firstname" type="text" name="firstname">
	</p>
	<p>
		<label for="lastname">Last name:</label>
		<br>
		<input id="lastname" type="text" name="lastname">
	</p>
	<button value="submit" name="form" type="submit">Go</button>
</form>

이 코드를 입력하면 위와 같이 출력된다.

htmli_sorted.php 파일의 코드를 확인하면 htmlspecialchars함수를 확인할 수 있다.