1. HTML Injection Stored이 무엇인지 간단하게 정리하시오.
1) HTML Injection Stored (저장기법)
- 공격자가 취약한 사이트에 악의적인 스크립트가 포함된 게시글 등을 올릴 경우 이 게시물을 열람하면 스크립트가 실행됨
- 공격 당한 사용자는 쿠키를 탈취당하거나 다른 사이트로 리다이렉션 되는 등의 피해를 입음
- 데이터베이스에 저장되고 해당 게시물을 열람한 사용자들이 공격의 대상이 되기 때문에 파급력이 큼
- 공격 방법
ⓐ 악성 행위를 하는 html 코드를 게시물에 심음
ⓑ 사용자가 게시물을 조회하면 악성 html 코드 실행
2. 문제 페이지에 코드를 삽입하여 아래와 같이 이전 QUEST인 html injection - reflected (POST)를 해결하세요.
[난이도 low]
글을 쓰는 칸이 있어서 이전 POST 방식 문제의 페이지 소스코드를 참고하여 form 태그를 입력해보았다.
그랬더니 firstname과 lastname을 입력하는 form 칸이 잘 나타난 것을 확인할 수 있었다.
입력도 할 수 있어서 이전 문제들의 low 단계에서 입력했던 태그들을 그대로 입력하고 Go 버튼을 눌러보았다.
원하는 화면을 출력할 수 있었다.
난이도 & 결과 화면 확인
[난이도 medium] - 풀 수 없는 이유를 설명하시오.
난이도 medium으로 옮기니 이전 단계에서 작성했던 form 코드가 모두 글자 그대로 출력되는 것을 확인할 수 있다.
저렇게 출력되는 원인을 알기 위해 페이지 소스 코드를 확인하여 이용된 htmli_stored 파일을 확인해보았다.
function htmli($data)
{
include("connect_i.php");
switch($_COOKIE["security_level"])
{
case "0" :
$data = sqli_check_3($link, $data);
break;
case "1" :
$data = sqli_check_3($link, $data);
// $data = xss_check_4($data);
break;
case "2" :
$data = sqli_check_3($link, $data);
// $data = xss_check_3($data);
break;
default :
$data = sqli_check_3($link, $data);
break;
}
return $data;
}
medium 단계이므로 케이스 1 부분을 확인해보았다.
입력된 데이터에 sqli_check_3 함수가 적용되어 있는 것을 확인할 수 있었다.
주석으로 xss_check_4 함수도 같이 있었기에 두 함수를 같이 살펴보기로 했다.
function_external 파일을 열어 sqli_check_3 함수와 xss_check_4 함수의 기능을 확인해보았다.
function sqli_check_3($link, $data)
{
return mysqli_real_escape_string($link, $data);
}
sqli_check_3 함수는 mysqli_real_escape_string 함수가 적용되어 있는 것을 확인할 수 있었다.
mysqli_real_escape_string 함수를 사용하면 SQL 문에서 특수 문자가 이스케이프된다.
사용 형식은 mysqli_real_escape_string(connection, escapestring)으로 connection 에는 사용하는 mysql의 연결을 해주고 escapestring에 오는 건 이스케이프 할 문자열이다.
문자를 이스케이프 하면 스크립트나 태그의 기능은 제거되지만 입력한 내용은 그대로 브라우저에서 확인이 가능하다.
function xss_check_4($data)
{
// addslashes - returns a string with backslashes before characters that need to be quoted in database queries etc.
// These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).
// Do NOT use this for XSS or HTML validations!!!
return addslashes($data);
}
xss_check_4 함수는 addslashes 함수가 적용되어 있는 것을 확인할 수 있었다.
addslashes 함수를 사용하면 '나 " 같은 특수 문자들을 포함하고 있는 문자열에 \를 추가함으로써 xss 공격을 방지할 수 있다고 한다.
예시를 보면 아래와 같다.
$str = "hello wo'rld";
$escp = addslashes($str);
// hello wo\rld
이처럼 사용자의 입력 값에 특수문자가 포함될 경우 위의 함수들로 인하여 브라우저가 html 요소로 해석하지 않아서 xss가 불가능하다.
따라서 난이도 high의 문제는 푸는 게 불가능하다.
'Security > Web Hacking' 카테고리의 다른 글
[bWAPP] SQL Injection - POST/search (0) | 2022.02.10 |
---|---|
[bWAPP] SQL Injection - GET/search (0) | 2022.02.10 |
[bWAPP] HTML Injection - Reflected(POST) (0) | 2022.02.08 |
[bWAPP] HTML Injection - Reflected(GET) (0) | 2022.01.30 |
[XSS Game] Level 6 (0) | 2022.01.23 |
댓글