본문 바로가기

WHOIS/Web hacking

CORS, CSP 소개 및 webhacking.kr 21 문제 풀이

CORS란? : cors는 Cross-Origin Resource Sharing의 약자로 교차 출처 리소스 공유 정책이라고 생각하면 된다. 추가 HTTP 헤더를 사용하여, 한 출처에서 실행중인 웹 어플리케이션이 다른 출처의 선택한 자원에 접근 권한을 부여하도록 브라우저에 알려주는 체계이다. 간단히 말해서 브라우저에서 다른 출처의 리소스를 공유하는 방법이다.

출처? : URL 구조의 프로토콜, 호스트, 포트를 합친 것을 의미

 

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

 

CSP란? : csp는 Content security Policy의 약자로 Mozilla가 개발한 표준 정책이다. 브라우저에서 임의의 JavaScript 태그 삽입 공격인 XSS를 방어하기 위해 만들어진 정책이다.  

https://caniuse.com/?search=CSP 에서 가져온 이미지인데 보시다시피 거의 모든 브라우저에서 해당 정책을 지원하고 있다. html meta 태그나 php header등에서 적용이 가능하다고 한다.

 

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

 

webhacking.kr 21번 풀이

 

 

 

문제 사이트에 들어가면 다음과 같이 나온다. id, pw에 guest를 집어넣고 로그인을 시도해보면 다음과 같이 나온다.

 

"login success"라고는 뜨나 별도의 FLAG나 메세지가 없기 때문에 아마도 admin 계정으로 로그인을 시도해야 할 것이다. 그렇담 password를 구하기 위해 blind sql injection 공격을 시도해야 하는데 해당 공격에서 필요한 True와 False를 판별하는 방법은 다음과 같다.

 

 

먼저 다음과 같이 pw를 닫아 버리고 or 1=1 #으로 공격을 시도해 보면,

 

 

다음과 같이 "wrong password" 메세지를 확인 할 수 있다. 다음으로 

 

 

이번에는 ' or 1=2 #를 넣어볼 것이다. 1=2는 당연히 거짓이기 때문에 이전과는 다른 메세지가 뜨지 않을까 의심해본다.

 

 

이번에는 "login fail"이라는 메세지를 볼 수 있다.

 

즉, 우리는 blind sql injection 공격을 하기 위한 과정에서 쿼리문이 True일때 뜨는 "wrong password"와 False일때 뜨는 "login fail" 문자열로 해당 패스워드의 length가 맞는지, 패스워드의 N번째 문자가 우리가 유추한 값이 맞는지 판별 할 수 있다. 먼저 패스워드의 문자열 길이를 구하는 코드는 다음과 같다.

 

 

for문 내부에서 length(pw) > i 가 맞는지 검사하여 최초로 해당 조건이 맞을때 password의 길이를 담아둔다. 조건이 True일때 뜨는 문자열인 "wrong password"가 있는지 확인하여 판별하였다. 그 결과 최종 문자열의 길이는 36인걸 알 수 있었다.

 

 

다음으로 구한 패스워드의 문자열과 sql 내부 substring 함수와 ascii 함수를 활용하여 최종 password 값을 구했다.

 

해당 부분 역시 조건이 True일때 뜨는 문자열인 "wrong password"가 있는지 확인하여 판별하였다. 완성 코드는 다음과 같다.

 

 

위 코드에서 본인 쿠키값을 넣어주고 돌리면 password를 구할 수 있다.

 

이중 for문을 돌리면서 프린터블한 문자열 하나하나 검사했기 때문에 구하는 시간이 좀 걸린당

 

PASSWORD : there_is_no_rest_for_the_white_angel

 

참고 자료

https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

 

교차 출처 리소스 공유 (CORS) - HTTP | MDN

교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라

developer.mozilla.org

https://evan-moon.github.io/2020/05/21/about-cors/

 

CORS는 왜 이렇게 우리를 힘들게 하는걸까?

이번 포스팅에서는 웹 개발자라면 한번쯤은 얻어맞아 봤을 법한 정책에 대한 이야기를 해보려고 한다. 사실 웹 개발을 하다보면 CORS 정책 위반으로 인해 에러가 발생하는 상황은 굉장히 흔해서

evan-moon.github.io

https://beomy.github.io/tech/browser/cors/

 

[Browser] CORS란?

이번 포스트에서는 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)에 대해 이야기해보도록 하겠습니다. 아래 사진과 같은 에러를 보신 적이 있으셨을 수도 있습니다.

beomy.github.io

https://simjaejin.tistory.com/31

 

CSP 보안설정

콘텐츠 보안 정책 (CSP) CSP (Content-Security-Policy) : 이 정책은 Mozilla가 개발 한 표준으로, 실행 시점 인 브라우저에서 XSS (Cross Site Scripting) 공격을 막는 것을 목표로합니다. CSP는 인라인 스크립트..

simjaejin.tistory.com

https://caniuse.com/?search=CSP