OWASP WebGoat

Buffer Overflows - Off-by-One Overflows



Buffer Overflows 카테고리로 넘어왔습니다. 웹앱 내에서의 BOF를 다룰 것 같네요. 지문을 보도록 합시다.



지문을 확인 해 보니 VIP 손님이 묵는 곳이 어떤 방인 지 찾아내라고 합니다.

별다른 힌트가 없으니 소스 코드 상에 뭔가 있을 것 같습니다. [Java Source]를 눌러 소스를 확인 해 보도록 하겠습니다.




쭉 훑어 보니 param3의 길이가 4096을 넘어 갈 때 VIP의 이름과 방 번호를 뱉어내는 분기문이 있습니다.

위 쪽의 체크 박스를 확인 해 보면 Param1, Param2, Param3는 각각 First Name, Last Name, Room Number를 나타내는 것을 알 수 있습니다.

여기서 소스 상에 나타난 First Name과 Last Name, Room Number를 이용하여 바로 세션을 패스 할 수도 있겠지만, 정석으로 풀어내기 위해 Room Number에 4096을 넘어가는 길이의 값을 넣어보도록 합시다.




python을 이용해 4097개의 문자열을 만들었습니다.



자, 그럼 이 값을 복사 해 둡시다.



위에서 복사한 값을 Room Number에 기입 해 주고 Submit을 해줍니다.



이 곳은 별 다른 의미가 없으니 바로 Accept 해줍시다.



의도 한 대로 문구가 나타났습니다. 세션을 완료하기 위해 Restart 후 첫 번째 VIP의 이름과 방 번호를 입력 해 봅시다.



Johnathan/Ravern/4321을 기입해 준 후 Submit을 눌러주면




짠! 끝났습니다.








OWASP WebGoat 

Authentication Flaws - Multi Level Login 2



Multi Level Login1에 이어 Login2입니다. 바로 지문 확인 해 보도록 하겠습니다.



Joe의 계정과 패스워드, 그리고 TAN 코드를 주고 Jane으로 로그인 하라고 합니다.





일단 하라는 대로 Joe/banana로 로그인 해 봅시다.




요구하는 1번의 TAN코드를 기입 해 주고, Login1과 동일하게 이 시점에서 Burp Suite로 패킷을 잡아줍시다.



GET으로 함께 보내는 인자 중 hidden_user라는 야리꾸리한 놈이 있습니다.



이 야리꾸리한 놈을 Jane으로 바꾼 후 진행 해 봅시다.




짠.


OWASP WebGoat

Authentication Flaws - Multi Level Login 1



Authentication Flaws의 세 번째 세션인 Multi Level Login 1입니다. 바로 지문을 보도록 하죠.




스테이지1은Jane/tarzan 으로 로그인을 하라고 합니다.




TAN 코드에서 2번째 숫자를 요구하는데, 그대로 입력 해줍니다.



정상적으로 로그인 되면서 스테이지2로 넘어 온 것을 확인 할 수 있습니다.

스테이지2는 Jane에게 보낸 피싱메일로부터 패스워드와 TAN 코드의 첫 번째 숫자를 알아냈다고 합니다.

어떻게든 이를 이용하여 로그인을 하라고 하네요. Burp Suite를 이용하여 Request가 어떻게 날아가는지 확인해보죠.




Jane/tarzan으로 로그인 했을 때 요구하는 TAN 코드는 3번째 숫자지만, 우리는 1번째 숫자만 알고 있으므로 1번에 해당하는 15648을 입력하여 Submit을 눌러줍니다.



Request를 확인 해 보면, GET 요청으로 hidden_tan과 tan이 인자로 함께 날아가는 것을 확인 할 수 있습니다. 여기서 유추 할 수 있는 것은 hidden_tan이 로그인 시 요구하는 TAN코드의 번호라는 것입니다.



우리가 알고 있는 TAN 코드는 1번이므로, hidden_tan의 값을 1로 바꾼 후 Request를 날려봅시다.




정상적으로 Jane 계정으로 로그인이 되면서 클리어 했습니다.


OWASP WebGoat 

Authentication Flaws - Forgot Password



Authentication Flaws 카테고리의 두 번째 세션입니다. Forgot Password라는 주제로, 패스워드를 잊어버렸을 경우의 상황을 가정하고 풀이하는 듯 합니다. 문제를 보도록 하겠습니다.




지문을 확인 해 보면 웹앱에서 패스워드를 잊어버렸을 경우 질의문답이 너무 간단한 메커니즘으로 구성되어 있어 취약하다는 내용입니다.

따라서 admin이라는 계정을 가지고 있지 않지만 패스워드를 획득 해 보라고 합니다.


admin을 시도 해 보기 이전에 지문에서 확인 했던 webgoat 계정부터 패스워드를 알아 내 보도록 하겠습니다.







webgoat라는 Username에 해당하는 질의의 답은 red였습니다. red를 입력하니 바로 webgoat라는 패스워드를 뱉어주네요. 그럼 이제 Username에 admin을 넣어 시도 해 보도록 하겠습니다.




Username에 admin을 넣어주고,



질의의 답으로 red를 입력하여 Submit 한 결과 admin에 적합하지 않은 응답이라고 뱉어냅니다. 그렇다면 다른 힌트가 없으니 게싱을 통해 색상을 적어주다 보면 green이 admin 계정의 질의에 대한 답이라는 것을 알 수 있습니다.




OWASP WebGoat

Authentication Flaws - Password Strength


과제로 시작하는 WebGoat 첫 포스팅입니다.

금주 WebGoat 과제는 Authentication Flaws 카테고리입니다. 인증 결함을 찾아내는 부분인 것 같습니다. 총 4개의 세션으로 이루어져 있으며, 이 중 첫 번째 세션인 Password Strength를 풀이 해 보도록 하겠습니다.




지문을 확인 해 보니, 우리가 사용하는 웹앱에서 계정을 보호하기 위해 https://howsecureismypassword.net에서 패스워드 검증을 시도 해 보라고 합니다. 총 6개의 패스워드가 주어져 있으며, 이를 해당 웹페이지에 입력하면 크랙 될 때 까지의 시간을 출력해주는 형식입니다. 바로 넣어보도록 합시다.


위 웹페이지가 패스워드 검증 사이트인데, 두 번째에 해당하는 패스워드인 abzfezd를 입력 했을 때의 출력 결과입니다. 이런 식으로 모두 입력 해 보았을 때의 결과는 아래와 같습니다.



23456 - 0 seconds (Instantly)

abzfezd - 0.2 seconds (2 Hundred Milliseconds)

a9z1ezd - 2 seconds

aB8fEzDq - 2 hours

z8!E?7D$ - 2 days

My1stPassword!:Redd - 36 quintillion years (3600경 년)


하지만 위 결과를 입력했을 때 정답이 출력되지 않아, Solution 탭을 확인하여 정답을 보니 전혀 다른 결과가 있었습니다.

아마 PC마다 다른 결과가 나타나거나 검증 웹페이지 알고리즘이 변경 되어 다르게 표기 된 듯 합니다.




위의 결과를 입력 해 보면 해당 세션을 패스 할 수 있습니다.









+ Recent posts