사자자리
[bWAPP] HTML Injection - Reflected (GET) 본문
Quest 1. HTML Injection
- 취약한 매개변수에 악성 HTML을 심어서 공격하는 방법
- 사용자가 연결을 요청한 페이지에 악성 HTML을 심어서 의도치 않은 내용을 보게 하거나, 악성 사이트로 연결되게 하는 방법
Quest 2. 아래 화면을 출력하시오.
[난이도 low]
First name에 Regulus, Last name에 Black을 입력하니 Welcome Regulus Black이 아래에 그대로 출력된다. 이를 이용해서 퀘스트를 수행하자.
View Page Source에서 출력할 형식에 맞는 태그들을 찾았다.
First name: <h1>SUCCESS</h1>
Last name: <img src="./images/bee_1.png">
[난이도 medium]
같은 방법으로 입력했더니 위와 같이 나왔다.
터미널에서 소스파일이 있는 /var/www/bWAPP로 이동하고, vim htmli_get.php을 실행했다.
function htmli($data)
{
switch($_COOKIE["security_level"])
{
case "0" :
$data = no_check($data);
break;
case "1" :
$data = xss_check_1($data);
break;
case "2" :
$data = xss_check_3($data);
break;
default :
$data = no_check($data);
break;
}
return $data;
}
난이도 low | no_check() 함수 |
난이도 medium | xss_check_1() 함수 |
난이도 high | xss_check_3() 함수 |
:quit를 입력하여 vim에서 나왔다.
위의 함수들은 functions_external.php에 정의되어 있다.
function xss_check_1($data)
{
// Converts only "<" and ">" to HTLM entities
$input = str_replace("<", "<", $data);
$input = str_replace(">", ">", $input);
// Failure is an option
// Bypasses double encoding attacks
// <script>alert(0)</script>
// %3Cscript%3Ealert%280%29%3C%2Fscript%3E
// %253Cscript%253Ealert%25280%2529%253C%252Fscript%253E
$input = urldecode($input);
return $input;
}
URL 인코딩을 해서 입력한다.
First name: %3ch1%3eSUCCESS%3c%2fh1%3e
Last name: %3cimg src=".%2fimages%2fbee_1.png"%3e
[난이도: high]
풀 수 없습니다. 풀 수 없는 이유를 정리해주세요.
난이도 low, medium에서 시도했던 방법을 입력했으나 막힌다.
function xss_check_3($data, $encoding = "UTF-8")
{
// htmlspecialchars - converts special characters to HTML entities
// '&' (ampersand) becomes '&'
// '"' (double quote) becomes '"' when ENT_NOQUOTES is not set
// "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set
// '<' (less than) becomes '<'
// '>' (greater than) becomes '>'
return htmlspecialchars($data, ENT_QUOTES, $encoding);
}
난이도 high에서 사용하는 함수를 살펴보니, htmlspecialchars 함수가 입력값을 우회한다.
*htmlspecialchar 함수
- PHP에서 제공하는 기본함수로, HTML서 사용하는 특수문자를 UTF-8로 반환해줌
위 함수는 html injection을 막기 위해, 태그에 사용하는 특수문자들을 인식할 수 없도록 인코딩하므로 난이도 high에서는 퀘스트를 성공할 수 없다.
'웹해킹 > bWAPP' 카테고리의 다른 글
[bWAPP] Cross-Site Scripting - Reflected (GET) (0) | 2022.08.03 |
---|---|
[bWAPP] SQL Injection – POST/Search (0) | 2022.07.30 |
[bWAPP] HTML Injection – Stored (Blog) (0) | 2022.07.17 |
[bWAPP] HTML Injection - Reflected (POST) (0) | 2022.07.17 |
[bWAPP] bWAPP 설치 (0) | 2022.07.11 |