사자자리

[bWAPP] HTML Injection – Stored (Blog) 본문

웹해킹/bWAPP

[bWAPP] HTML Injection – Stored (Blog)

renne 2022. 7. 17. 06:27

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

https://www.softwaretestinghelp.com/html-injection-tutorial/#1_Stored_HTML_Injection

 

HTML Injection Tutorial: Types & Prevention with Examples

HTML Injection is just the injection of markup language code to the document of the page. Stealing other person’s identity may also happen during HTML Injection. This tutorial will give you a complete overview of HTML Injection, its types and preventive

www.softwaretestinghelp.com

stored HTML Injection 공격은 악성 HTMl 코드가 웹 서버에 저장되어 있을 때 발생하며, 사용자가 적절한 기능을 호출할 때마다 실행된다.

 

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

 

[난이도 low]

hint1. 우리가 배운 범위 내에서 해결할 수 있습니다.
hint2. form 태그를 사용해보세요.
hint3. form 태그를 이용해 reflected (POST) 문제 페이지로 전송해보세요.

textarea에 아무거나 입력하고 submit했더니, Entry에 내가 입력한 데이터가 출력되었다.

 

    <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>

HTML Injection - Reflected (POST)에서 해킹 결과(SUCCESS와 벌 사진)를 얻어야 하므로, HTML Injection - Reflected (POST)로 이동해 page source의 form 태그 부분을 가져왔다. firstname과 lastname에 데이터를 입력하고 submit하면 입력한 데이터와 함께 /bWAPP/htmli_post.php로 이동하는 것을 알 수 있다.

 

textarea에 복사한 form 태그를 입력하고 submit했더니, HTML Injection - Reflected에서 보던 입력창이 나타났다.

 

HTML Injection - Reflected의 난이도 low에서 하던 것처럼

First name: <h1>SUCCESS</h1>

Last name: <img src="./images/bee_1.png">

을 입력했더니 성공했다.

 

[난이도 medium]

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

 

난이도를 medium으로 바꿨더니 아까 입력한 form 태그가 html 코드 그대로 출력되어 있었다.

 

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

view page source를 보니, submit하면 htmli_stored.php로 간다. bWAPP에서 /var/www/bWAPP로 이동한 다음, htmli_stored.php 파일을 다운받아서 살펴보자.

 

<?php
}
while($row = $recordset->fetch_object()){
    if($_COOKIE["security_level"] == "1" or $_COOKIE["security_level"] == "2"){
?>
        <tr height="40">
            <td align="center"><?php echo $row->id; ?></td>
            <td><?php echo $row->owner; ?></td>
            <td><?php echo $row->date; ?></td>
            <td><?php echo xss_check_3($row->entry); ?></td>
        </tr>

<?php
    }
    else
    {
?>
        <tr height="40">
            <td align="center"><?php echo $row->id; ?></td>
            <td><?php echo $row->owner; ?></td>
            <td><?php echo $row->date; ?></td>
            <td><?php echo $row->entry; ?></td>
        </tr>
<?php
    }
}
$recordset->close();
$link->close();
?>

htmli_stored.php 파일에 있는 보안 레벨 관련 함수를 보니, security_level이 1(medium) 또는 2(high)일 때, 내가 입력한 데이터(entry)가 xss_check_3 함수, 즉 htmlspecialchars 함수가 있는 함수를 통해 echo되는 것을 알 수 있다. 또다시 htmlspecialchars 함수 때문에 풀 수 없다.

 

Comments