본문 바로가기

해킹/해킹 기법

[2주차] 로그인 우회 풀이 - 불충분한 세션 관리 취약점

** 불충분한 세션 관리 취약점 :

 

웹 상에서 사용자가 로그인을 할 시,매번 동일 세션 id 발급 (또는 일정 패턴 존재)  또는, 세션 타임 아웃을 너무 길게 설정한 경우, 공격자에 의해 세션이 탈취될 수 있는 취약점

 

 

------------------------------------------------------------------------------------

 

로그인 화면을 분석해보자

 

ctrl +shift+del을 눌러 쿠키를 제거한 후, 새로고침을 하면

기본적으로 이 페이지가 처음에 어떤 페이지들을 불러오는지를 볼 수 있다.

 

주어진 아이디와 비밀번호를 가지고 로그인을 시도해보면

loginProc.php 가 불려오면서 index.php로 넘어가는 것을 볼 수 있다

 

 

처음에는 mario 계정으로 접속해도 cookie 에 admin 유저아이디와 admin session Id가 자꾸만 찍혀나왔다

아직 사용법이 미숙하니까 쉽게 풀라고 강사님이 일부러 불완전한 페이지를 만들었구나 싶어 하루죙~일 고민했으나 결국 답이 없었다.

 

ctrl + shift + del 을 눌러 모든 쿠키를 제거하고 나자 정상적으로 돌아왔다

mario 계정으로 로그인하니 mario session id를 서버에서 발급해줬다

이걸 정해진 admin session id로 바꿔서 로그인 우회를 시도해보았다

 

처음 정해진 login.php에 PHPSESSID를 admin id로 바꿔주면 index.php로 넘어간다

이 때 index.php에도 PHPSESSID를 바꿔주면 이렇게 나온다

???? 뭐지

분명 PHPSESSID 바꿨는데...

 

 

HTTP History에서 다시 loginProc.php 파일을 분석해보았다

php? 다음에 PHPSESSID를 넣고

Cookie 쪽에도 바꿔주었다.

왜 저렇게 했냐면 어차피 userId를 mario 고대로 썼다간 똑같이 mario로 접속될 것 같아서..

암튼 이것도 실패

 

---------------------------------------------------------------------------------------------------------------------------------------------

해결 방법

두 가지 페이지에 대해서 Repeater를 적용할 것이다

loginProc.php와 index.php에서 /?userId=admin을 써넣어주면 완료가 된다 (사실 이 부분도 왜 되는지 이해를 잘 못하겠음)

어쨌든 실제 패킷을 날렸기 때문에 서버에서는 이걸 로그인 했다라고 인지하는걸까?

 

 

우선 loginProc.php 파일을 마우스 오른쪽 클릭으로 Repeater로 보낸 후, 바뀐 패킷을 보내자

 

 

loginProc.php 바꾸고

index.php 바꾸고

 

이렇게 두가지다 바꿔주면

 

이렇게 축하한다며 비밀번호를 알려주는 창이 뜨는 것을 확인할 수 있다

 

 

 

여러 시도를 해보았는데, loginProc.php의 데이터를 바꾸지 않고 index.php만을 바꾸면 페이지가 옳게 넘어가지 않는다.

Repeater로 보내는 패킷들이 다 저장이 되고 있는 것 같다

독립적일 거라고 생각했는데...

 

위의 사진과 같이 loginProc.php의 데이터를 바꾸지 않고 index.php만을 바꾸면 정답 창이 뜨지 않는 모습이다.

 

아직 로그인 과정에 대한 A~Z를 몰라서 그런지 모르겠지만  userId가 아니라 phpsessid를 이용하는 방법은 계속 실패해서일수도 있지만 감이 잡히질 않는다 좀 더 알아봐야겠다