Broken Authentication – Password Attack
CAPTCHA Bypassing 의 경우 로그인 수행 시 출력되는 메시지를 이용하여 Brute Force & Dictionary Attack 을 진행했다. 이번에도 인증수준이 낮은 페이지부터 높은 페이지까지 Burf suite 의Intuder을 활용하여 공격을 실습한다.
1. Broken Authentication – Password Attack(low)
Login Form으로 되어있으며 기본적으로 ID와 Password가 제공되고 있다 bee/bug 로 로그인 성공시 “Successful login!” 이라는 문구가 출력됨을 확인할 수 있다.
잘못된 정보로 로그인 시 “Invalid credentials! Did you forgot your password?” 라는 오류문구가 출력됨을 알 수 있다. 이를 기반으로 burp suite를 통해 ID, Password Check을 진행한다.
Burp suite를 통해 패킷을 캡쳐 한 후 Send to Intruder을 통해 공격준비를 진행한다.
Intruder -> Positions 진입 -> Clear -> 적합한 위치에 payload를 삽입 Attack type의 경우 Cluster bomb를 선택한다.
payloads 탭으로 이동하여 simple list를 통하여 Brute Force 공격을 위한 목록을 지정해준다.
1번의 경우 ID, 2번의 경우 Password 를 지정한다.
Options 탭으로 이동하여 Grep – Match 의 내용을 Clear를 통해 모두 지워준 후 login 성공의 경우 출력되는 메시지(Successful login!)을 삽입, start attack을 통해 공격을 진행한다.
시간이 지나면 결과가 출력된다, 결과 확인시 성공문구가 출력된 경우만 체크되어있음을 확인할 수 있고 Server Response 확인 시 로그인성공 문구가 전송됨을 확인할 수 있다 즉 bee/bug 조합으로 로그인이 가능하다.
2. Broken Authentication – Password Attack / (medium)
Medium level의 경우 salt값이 들어간걸 확인할 수 있다, login시도할때마다 salt값이 변경됨으로 지속적으로 다른 값으로 공격을 시도하는 Brute Force나 Dictionary 공격은 불가능한걸 확인할 수 있다.
3. Broken Authentication – Password Attack / (high)
High level의 경우는 Captcha 기능이 추가되어있는걸 확인할 수 있다 로그인 패킷을 캡쳐해보자
captcha_user 의 인증을 받고있는걸로 확인되고 있다 salt값을 대체하고 있는걸로 확인되고있다 해당경우는 captcha의 값이 변경되지않고 고정되어있을 경우에는 Brute Force 또는 Dictionary 공격에 취약할 수 있다.
4. Broken Authentication – Password Attack / source code
switch($_COOKIE["security_level"]) { case "0" : header("Location: ba_pwd_attacks_1.php"); break; case "1" : header("Location: ba_pwd_attacks_2.php"); break; case "2" : header("Location: ba_pwd_attacks_4.php"); break; default : header("Location: ba_pwd_attacks_1.php"); break; } |
Level 별로 case가 나눠져있는걸 확인할 수 있다.
1) low level
if(isset($_POST["form"])) { if($_POST["login"] == $login && $_POST["password"] == $password) { $message = "<font color=\"green\">Successful login!</font>"; } else { $message = "<font color=\"red\">Invalid credentials! Did you forgot your password?</font>"; } } |
Login 과 password 값을 받아서 로그인하는걸 확인할 수 있다.
2) medium level
if(isset($_POST["form"])) { if(isset($_SESSION["salt"]) && ($_POST["salt"] == $_SESSION["salt"])) { if($_POST["login"] == $login && $_POST["password"] == $password) { $message = "<font color=\"green\">Successful login!</font>"; } else { $message = "<font color=\"red\">Invalid credentials! Did you forgot your password?</font>"; } } else { $message = "<font color=\"red\">Incorrect salt!</font>"; } } $salt = random_string(); $_SESSION["salt"] = $salt; |
salt값이 랜덤으로 받아오는걸 확인할 수 있다, 로그인 시도할 때 마다 값이 달라짐으로 Brute Force 및 Dictionary 공격이 불가능한걸 확인할 수 있다.
3) high level
if(isset($_POST["form"])) { if(isset($_SESSION["captcha"]) && ($_POST["captcha_user"] == $_SESSION["captcha"])) { if($_POST["login"] == $login && $_POST["password"] == $password) { $message = "<font color=\"green\">Successful login!</font>"; } else { $message = "<font color=\"red\">Invalid credentials! Did you forgot your password?</font>"; } } else { $message = "<font color=\"red\">Incorrect CAPTCHA!</font>"; } } |
High level의 경우 captcha 값을 검증하는걸 확인할 수 있다 captcha값의 경우 추가적인 조작이 있지않을 경우 값이 변경되지않도록 설정되어있기 떄문에 Brute Force 및 Dictionary 공격이 가능한걸 확인할 수 있다.
단. 위의경우는 세션이 고정되어있는 실습환경이기에 가능하고, 실제로 세션이 매번 변경되도록 설정되어있을시, 원활한 공격이 가능할지는 미지수이다.
'Hacking > bWAPP' 카테고리의 다른 글
XSS(Cross-Site-Scripting) Reflected_GET,POST (0) | 2021.06.21 |
---|---|
Broken Authentication – Session & Cookie (0) | 2021.06.21 |
Broken Authentication – CAPTCHA (0) | 2021.06.14 |
SQL-Injection AJAX, Login, Blog (0) | 2021.06.14 |
SQL Injection - Login Form (0) | 2021.06.14 |