[문제]
[풀이]
소스 코드를 살펴보면 guest, user, admin 계정이 있음을 확인할 수 있다.
os.urandom(4).hex() 함수를 통해 4byte의 무작위 값을 hex 값으로 변환하여 session_id에 저장한다. 그 다음에 session_storage[session_id] = username을 통해 로그인 한 사용자의 세션 ID를 정의한다.
session_storage[os.urandom(1).hex()] = 'admin'을 통해 admin의 세션 ID를 정의한다. 이때, admin의 세션 ID는 1byte의 hex 값으로 설정된다.
플래그를 얻기 위해서는 admin 계정으로 로그인을 해야 하는데 admin의 세션 ID를 Brute force attack을 통해 알아낸 다음 admin 계정으로 로그인을 진행할 수 있다. Burp Suite를 통해 Brute force attack을 진행해보자.
문제 화면에 접속하는 패킷을 캡쳐하고, Brute force attack을 수행할 수 있도록 session 변수를 지정해준다.
해당 패킷을 Send to Intruder한 뒤에 Intruder로 이동했다.
payload 타입을 Brute forcer로 설정한다.
admin의 세션 ID는 1byte의 hex 값으로 설정되어 있기에 'abcdef0123456789' 중 두 개의 문자를 조합하는 식으로 공격을 수행할 것이다. Start Attack을 클릭해 공격을 수행한다.
Results의 패킷 중 다른 패킷들과 다르게 Length가 다른 패킷을 확인할 수 있다.
해당 패킷의 정보를 자세히 살펴보면 다음과 같이 플래그를 확인할 수 있다.
'웹 > 드림핵' 카테고리의 다른 글
funjs (0) | 2022.05.14 |
---|---|
login-1 (0) | 2022.05.14 |
web-misconf-1 (0) | 2022.05.10 |
simple-ssti (0) | 2022.05.10 |
php-1 (0) | 2022.05.04 |