공부?/국비 지원 일기장

56일차 - Cookie

무무요 2024. 11. 1. 09:16


=======

CSS(Client Side Script) , SSS(Server Side Script)

3Tier 구조에서 DML의 사용이 많다.

method

get - 단순 요청

POST - 내가 던진 값을 받아서 처리해줘

get 메소드와 POST 메소드의 차이

웹브라우저 = HTML 번역기 , 사람이 볼 수 있게 바꿔서 화면에 띄워주는것

클라이언트가 입력한 내용을 받아서 저장

Referer - 웹사이트에서 편의성을 위해 만들어짐

Cookie
- HTTP 프로토콜의 특성상(stateless) 웹브라우저와 웹서버간에 연결정보를 유지 해야 함 → Cookie사용
만약 연결정보를 상호간 유지하지 않는다면 지속적인 인증 과정이 필요함
-  HTTP가 stateless 특징을 가지고 있기 때문에 Cookie를 사용해 연결을 유지

 

Cookie 전송 과정 실습

 

웹서버 asp, html 세팅

 

1. Cookie 전송 과정 실습 ( 클라이언트와 서버 통신 과정에서 Cookie 사용 확인 실습 )

 

- Kali 시스템에서 Proxy 설정 후 http://FQDN -> ID/Password 입력후 로그인 버튼 클릭

요청 시에는 Cookie 값이 없지만 응답 내용에 set-Cookie 값 확인 가능

- 세션 cookie는 ASP 요청을 하면 asp.dll이 발급

- cookie는 인증용도로 만들어진 것은 아니지만 현재는 인증 용도로 많이 사용

- 세션 cookie는 한번만 발급되며 TCP 연결이 종료되어도 클라이언트에서 cookie 값을 서버 측으로 보냄으로 클라이언트 시스템을 구별할 수 있음

 

2. Cookie 값을 이용한 Referer 인증 우회 방어 실습 ( 클라이언트와 서버 통신 과정에서 Cookie 사용 확인 실습 )

 

- kali에서 proxy 설정

http://FQDN/login_success.asp 입력한 후 referer 값을 명시하여 접속 되는지 확인

- 인증 우회를 막기 위해 login_proc.asp, login_success.asp 파일 내용 편집 

login_proc.asp

<%
id=request.form("id")
pw=request.form("pass")

if id="test" and pw="1234" then
	session("login1")="success"
    response.redirect "/login_success.asp"
else
	reponse.redirect "/idpw_incorrect.html"
end if
%>

# session("login1")="success" : login 이라는 세션 변수를 생성하고 "success" 저장

 

login_success.asp

 

<%
if session("login1")="" then
	response.redirect"/idpw_incorrect.html"
end if

response.write "로그인 성공"
%>

# if session("login1")="" : 세션 변수  login1 항목에 내용이없다면 idpw_incorrect.html 파일로 redirect

 

다시 http://www.FQDN/login_success.asp 입력 -> proxy 항목에 Rererer 값 추가

- > 기존에 세션 형성이 안 되어 있는 상태이므로 인증 우회가 안되는것을 확인할 수 있음

 

 

3. Cookie 변조를 통한 로그인 인증 우회( 피해자 시스템에서 정상 접속 후 Attack(칼리) 시스템에서 Sniffing을 하여 cookie 값을 훔친 후 proxy로 위조한 뒤 내용을 전송해 인증 우회 )

 

- kali 에서 Sniffing을 위해 wireShark 실행

 

(ip.src_host==192.168.1.33&ip.dst_host==192.168.1.10)||(ip.src_host==192.168.1.10&ip.dst_host==192.168.1.33)
# 192.168.1.33 = 피해자 W XP
# 192.168.1.10 = 웹서버

 

 

입력

 

- 피해자(W XP) 시스템에서 

http://FQDN  -> 로그인 클릭 -> ID:test /password:1234 입력후 접속

 

- kali 시스템에서 wireShark 를 이용해 피해자에게 발급된 cookie 값 확인

Protocol - HTTP 를 찾아보면 있다.

copy - value 로 복사

 

- kali에서 proxy 구성 후

http://FQDN/login_success.asp -> Proxy 항목에서 피해자의 cookie값을 입력

원래 쿠키

바꾼 쿠키

 

로그인 성공이라는 메시지가 나온다.

 

-클라이언트 측의 브라우저가 종료되면 Cookie는 사라지게 되고 RST 패킷이 전송 됨

RST 패킷을 수신한 서버 측 에서는 세션 변수의 값을 Clear함 → Dos 공격에 악용될 수 있음

(RST 패킷을 송신 하지 않고 다른 세션을 이용해 서버측의 메모리를 세션 변수로 채울 수 있음)

 

- 같은 시스템에서 2개 이상의 브라우저를 이용해 특정 웹 서버에 접속 하면 서로 다른 Cookie값이 발급됨

(개념적으로 브라우저마다 Cookie를 각기 갖고 있다고 생각 하면 됨)

 

- 따라서 Cookie 값은 페이지 마다 새롭게 발급 해야 함

(Random함수를이용해 요청해오는페이지마다다르게Cookie값을발급)

 

4. Random 함수를 이용한 간단 실습

 

- 웹서버에 디렉토리에 ran.asp 파일 작성

<%
randomize()
response.write 1000*rnd()+1
%>

 

win XP 시스템에서 http://FQDN 입력 후 F5 -> 계속해서 새로운 값들이 화면에 출력

 

 

 

5. Random Cookie 값을 생성하는 소스 파일 작성 ( cookie 값이 Random하게 만들어져 발급하도록 소스 파일 편집 후 cookie 값이 변경되어 발급되는지 확인 )

 

- 웹서버에서 login_proc.asp 파일 편집

<%
 id=request.form("id")
 pw=request.form("pass")
 
 if id="test" and pw="1234" then
 	randomize()
 	num=int((1000)*Rnd()+1)
 	response.cookies("Hackme")=num

	session("num1")=Cstr(num)

	response.redirect "/login_success.asp"
 else
 	response.redirect "/idpw_incorrect.html"
 end if
 %>
 
#코드설명
#randomize() :난수발생기를초기화하는함수
#num=int((1000)*Rnd()+1) :랜덤값생성(10진수정수형태의값생성)
#response.cookies("HackMe")=num : response.cookies(쿠키이름)=값,HackMe라는이름의쿠키값발급
#session("num1")=Cstr(num) :쿠키 값은 자동으로 문자열로 저장 되지만 세션 값은 그렇지 않기 때문에
#문자열 형변환 함수인 Cstr()를 사용해 세션 값도 문자열로 저장 되도록 하는 내용

 

- login_success.asp 파일 편집

- 서버에서 발급 후 클라이언트가 cookie 값을 보내오면 처리하기 위해 login_success.asp 파일도 편집

<%
 MyCookie=request.cookies("HackMe")
 num=session("num1")
 if num<> MyCookie then
 	response.redirect "/cook_diff.html"
 end if
 if MyCookie=""then
 response.redirect "/cook_no.html"
 end if
 randomize()
 num=int((1000)*Rnd()+1)
 response.cookies("HackMe")=num
 session("num")=Cstr(num)
 response.write "로그인성공"
 %>
 
 #코드설명
#Mycookie=request.cookies("HackMe") : HackMe라는 이름의 Cookie 값을 MyCookie라는 변수에 저장
#num=session("num1") : num 이라는 변수에 num1의 세션 값 저장
#if num<> MyCookie then
#response.redirect "/cook_diff.html" : Cookie / 세션값을 비교해 다르면 cook_diff.html 로 Redirect
#if MyCookie=""then
#response.redirect "/cook_no.html" : Cookie 값이 없을 경우 cook_no.html 로 Redirect
#randomize()
#num=int((1000)*Rnd()+1)
#response.cookies("HackMe")=num
#session("num")=Cstr(num)
# : 새로운 랜덤 Cookie 값 생성 및 발급

 

- cook_diff.html 파일과 cook_no.html 파일 작성

ex. cook_diff.html 

쿠키 값이 일치하지 않습니다.

ex. cook_no.html

쿠키 값이 전송되지 않았습니다.

 

- kali 시스템에서 burp suite 설정 후

http://FQDN -> 로그인 항목 클릭 -> ID/Password 항목에 test/1234 입력 후 로그인 버튼 클릭 -> 응답 메세지를 확인해 보면 asp.dll 이 발급하는 cookie 값 이외에 다른 cookie 값이 전송되는 것을 확인할 수 있음

- login_success.asp 파일 요청 시 발급 받은 cookie 값을 전송하는 것을 확인할 수 있음

 

- 최종 login_success.asp 파일 응답 메세지 항목에 이전과 다른 cookie 값이 전송되는것을 확인할 수 있음

=======

'공부? > 국비 지원 일기장' 카테고리의 다른 글

58일차 - 정보 보안  (0) 2024.11.04
57일차 - SQL Injection  (1) 2024.11.01
55일차 - 스푸핑  (1) 2024.10.30
54일차 - 웹 해킹 2  (0) 2024.10.29
53일차 - 웹 해킹 시작  (2) 2024.10.28