이해를 돕기 위해 아래에 극단적인 코드 예시를 가져왔다. app.post('/login',function(req,resp){ var id = req.body.id if (id.toLowerCase()!=='hiroo' && id.toUpperCase() === "HIROO") { res.render('alert',{contents:'hello admin!',red:'/admin'}) } } 언뜻 보기엔 말이 되지 않는 코드, 통과할 수 없는 if 문 이지만, 이는 얼마든지 우회, 통과가 가능하다. toLowerCase(), toUpperCase() 함수를 사용하여 비교구문을 작성할때, 예상치 못한 결과가 도출될 수 있음에 주의하자. Javascript(혹은 여타 언어) 의 toLowerCase(), to..
URL globbing curl 을 사용할때 다음과 같은 오류를 겪어본 적이 있을 수 있다. url: (3) [globbing] error: bad range specification after pos 30 curl: (3) bad range in URL position 30 구글링 해보면 이에 대한 해결책으로 -g 나 -globoff 옵션을 사용하라고 하는데 이는 globbing 기능을 비활성화 하는 것이다. curl 은 비슷하고도 다양한 url 을 한번에, 쉽게 지정하기 위해 globbing을 제시한다. 예약 문자 [ ] 와 { } 를 사용하며 출력변수를 지정하고, 범위를 지정할 수 있다. curl "http://example.com/section[a-z].html" curl "http://examp..
CSP? CSP는 Content-Security-Policy의 약자이며, 하나의 보안 정책이다. 웹 페이지에서 사용될 수 있는 자원의 위치, 출처 등에 제약을 줄 수 있기 때문에, 자체적인 XSS 방어 정책과 곁들인다면 XSS를 매우 효과적으로 방어 할 수 있다. CSP는 Content-Security-Policy HTTP 헤더에 추가하여 적용 할 수 있으며, html 페이지에서 태그를 활용할 수도 있다. SOP와 다르게 룰을 직접 설정하기 때문에, 잘못된 설정은 아무 의미도 없게 되어버릴 수도 있다는 것이다. (= 정책에 따라 bypass 방법이 다양할 수 있다.) 따라서 csp를 올바르게 설정하였는지 검사해 볼 수 있는 사이트도 있으니 참고하도록 하자. https://csp-evaluator.with..
본 글은 워게임 문제를 풀던중 다음과 같은 코드에서 시작되었다. if url.startswith("file://"): return 'wrong' #, @, : 등 다양한 character 들로 파서를 우회 한 후 원하는 값으로 위조된 요청을 보내는 방법들 보다 file URI 를 중심으로 서술하겠다. 다음은 공격자가 서버가 연결하는 URL을 제어 할 수 있는 예이다. def url_request(): url = request.args.get('url', '').lower() title = request.args.get('title', '') data = urlopen(url).read() localhost 필터링을 우회하여 어드민 경로(flag 경로)에 접속하는 것 뿐만 아니라 다양한 URI 스키마로 원..
Client-Side Template Injection (이하 csti)는 Server-Side Template Injection(이하 ssti)와 웹 템플릿 엔진에 공격자의 공격 코드가 템플릿에 포함된 상태에서 공격자의 공격코드가 인젝션 되어진다는 것에서 같다. 말 그대로 server 와 client의 차이가 존재할 뿐이다. Client Side에서 Javascript를 실행 할 수 있기 때문에, XSS 취약점과 연계 가능하다는 것이 일감이다. CSTI의 취약성은 클라이언트측 템플릿 프레임워크를 사용하는 응용프로그램이 웹 페이지에 사용자 입력을 동적으로 포함할 때 발생한다. 당연하게도 ssti와 같이 템플릿 엔진에 따라 사용할 수 있는 payload 와 공격 방식이 다르다. 대표적인 프론트엔드 프레임워..
2fb5e928-47f5-11ed-862e-0242ac110005 > uuid 버전 1의 예시 다음의 uuid 에서 매우 많은 정보가 포함되어 있습니다. 1. mac 주소 예시에서 0242ac110005 부분으로 이는 서버의 mac 주소로 통한다 2. Time stamp uuid v1은 timestamp를 기반으로 uuid를 생성하기 때문에, 시드값으로 time.time() 과 같은 함수를 사용하였다면 이는 위험할 수 있습니다. 예시의 uuid에서 timestamp를 추출하는 방법