정보보안(구버전)/ bWAPP 2019. 2. 22. 21:21
웹 해킹 bWAPP - 98. A7 - Missing Functional Level Access Control - XML External Entity Attacks(XXE)
본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다.
1. Missing Functional Level Access Control
- OWASP Top10 A7 - 기능 수준의 접근 통제 누락
- 접근 통제 및 검증이 서버 설정, 관리 부분에서 제대로 구성되지 않았을때 중요 자원 접근이 가능한 취약점이다.
- Ex) 디렉토리 접근, 파일 접근, 파일 다운로드 및 업로드
2. XML External Entity Attacks(XXE)
- XML 인젝션을 실시하여 XML Parser(마크업 분석/구조화된 정보를 어플리케이션에게 전달하는 프로세서)
를 통해 페이지의 내용을 대체하는 권한을 획득하는 취약점이다.
- 이를 통해서 서버 시스템 내부 자원을 접근할 수 있다.
3. Missing Functional Level Access Control - XML External Entity Attacks(XXE)
- 이 시나리오는 SYSTEM 키워드를 이용하여 XML 인젝션을 실시하고, 시스템 내부 자원 정보를 획득하는 내용이다.
- 이때, 'XXE'라는 외부 엔티티를 선언하고, '&XXE;' 변수를 이용하여 '/etc/passwd' 정보를 획득한다.
Ex1) Missing Functional Level Access Control - XML External Entity Attacks(XXE) 이해
보안 레벨 선택 및 시나리오 선택
Intercept -> 'Intercept is on' 으로 변경 실시
'Any bugs?' 클릭
마우스 우클릭 -> 'Send to Repeater' 클릭 -> Repeater 클릭 및 이동
Request Body에 XXE 스크립트 실시
POST /bWAPP/xxe-2.php HTTP/1.1 Host: 192.168.20.205 User-Agent: Mozilla/5.0 (Linux; Android 7.0; PLUS Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36 Accept: */* Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: http://192.168.20.205/bWAPP/xxe-1.php Content-Type: text/xml; charset=UTF-8 Content-Length: 59 Cookie: PHPSESSID=7bdb63cf61374b3f8f4ccdd1051d2bde; security_level=0 Connection: close
<reset><login>bee</login><secret>Any bugs?</secret></reset> <- 기존 내용
<?xml version="1.0" encoding="utf-8"?> |
'Go' 버튼 클릭 -> Response에 '/etc/passwd' 파일 내용 확인
'Proxy' 클릭 및 이동 -> Intercept is on 클릭하여 off 실시
'Intercept is off' 확인
Ex2) 'xxe-1.php' & 'xxe-2.php' 파일 내용 확인
bee@bee-box:/var/www/bWAPP$ ls -l xxe-*
-rw-rw-r-- 1 root www-data 5318 2014-11-02 23:52 xxe-1.php
-rw-rw-r-- 1 root www-data 2530 2014-11-02 23:52 xxe-2.php
bee@bee-box:/var/www/bWAPP$ vi xxe-1.php
~ 중간 생략 ~
</div>
<h1>XML External Entity Attacks (XXE)</h1>
<p>Reset your secret to <input type="button" OnClick="ResetSecret();" value="Any bugs?"></p>
<script type="text/javascript">
function ResetSecret()
</script>
</div>
:q! |
bee@bee-box:/var/www/bWAPP$ vi xxe-2.php
~ 중간 생략 ~
// If the security level is not MEDIUM or HIGH
ini_set("display_errors",1);
$xml = simplexml_load_string($body);
// Debugging
$login = $xml->login;
if($login && $login != "" && $secret) // $login = mysqli_real_escape_string($link, $login);
$sql = "UPDATE users SET secret = '" . $secret . "' WHERE login = '" . $login . "'";
// Debugging
$recordset = $link->query($sql);
if(!$recordset)
die("Connect Error: " . $link->error);
}
$message = $login . "'s secret has been reset!"; }
else
$message = "An error occured!";
}
}
// If the security level is MEDIUM or HIGH
// Disables XML external entities. Doesn't work with older PHP versions!
// Debugging
$login = $_SESSION["login"];
if($secret)
$secret = mysqli_real_escape_string($link, $secret); // SQL 인젝션에서 사용하는 특수문자에 백슬래시를 붙여 입력값을 이스케이프 실시 (NULL, \n, \r, \, ', ", ^Z)
$sql = "UPDATE users SET secret = '" . $secret . "' WHERE login = '" . $login . "'";
// Debugging
$recordset = $link->query($sql);
if(!$recordset)
die("Connect Error: " . $link->error);
}
else
$message = "An error occured!"; }
}
:q! |
Ex3) 보안 레벨 'High' 변경
보안 레벨 및 시나리오 선택
XXE 스크립트 인젝션 실패
[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)
웹해킹 98. A7 - bWAPP Missing Functional Level Access Control - XML External Entity Attacks(XXE)