[Intent CTF] Web 카테고리 첫번째 문제입니다.

일부 연구원은 CTF용 웹사이트를 배포하기 시작했지만 플래그를 숨기려고 할 때 정의된 정책에 문제가 발생했습니다.
약한 링크를 찾을 수 있습니까?

think1 정책을 통해서 해당 서버를 보호하고 있으며 정책중에 문제가 있어 취약한 부분을 공격하는 문제인듯 합니다.

 

추가로 제공된 ha.cfg 파일을 확인해보도록 하겠습니다. 내용은 아래와 같습니다.

global
    daemon
defaults  
    mode    http
    timeout  client  50000
    timeout  server  50000
    timeout  connect 50000
frontend web 
    bind *:8000  
    http-request deny if { path_beg /flag }
    http-request deny if { path,url_dec -m reg ^.*/?flag/?.*$ }
    default_backend websrvs
backend websrvs 
    http-reuse always
    server srv1 flask:5000

 

구성과 내용을 기반으로 검색해 보았을 때 ha.cfg 파일은 로드밸런싱 및 보안을 위한 haproxy 파일로 보입니다.

http-request deny로 몇가지 제약사항 필터링이 걸린것을 확인 할수 있습니다.

 

think2 해당 주소 /flag로 접근하기 위해서는 필터링을 무력화해야만 합니다.

필터링 조건들을 한번 살펴 보겠습니다.

http-request deny if { path_beg /flag }

/flag 문자열로 시작되는 요청은 차단된다는 의미입니다.

http-request deny if { path,url_dec -m reg ^.*/?flag/?.*$ }

url을 디코딩한 후에 나오는 값이 정규표현식 ^.*/?flag/?.*$ 문자와 같을 경우 모든 요청을 차단합니다.

이곳에서 자세히 봐야 할것이 있습니다. 정규표현식이 잘못됬다는 것입니다.

표현할때 역슬래쉬로 처리를 해줘야 동작합니다. 

/? -> \/\?

 

think3 /flag가 정확히 어떤주소에 있는지 살펴보겠습니다.

다행히도 url:port 바로 뒤에 /flag가 존재하며 정책에 의해 접근이 불가능 한것을 확인할 수 있습니다.

 

think4 필터링을 우회해보도록 하겠습니다.

/flag로 접속할경우 보안 정책에 의해 403 Forbidden이 Response 값으로 나오게 됩니다.

/flag를 1./flag로 시작하면 안된다. 2. url deocoding한 값이 제시된 정규표현식과 일치해서는 안된다는 조건에 의거하여 /./../flag로 변경하도록 하겠습니다.

 

 

. 때문에 403 Forbidden이 뜨고 있습니다.

정규표현식에서 . 의 경우 line terminators를 이용하여 우회가 가능합니다.

%0a를 사용해보도록 하겠습니다.

 

 

200 정상적으로 Response가 나타나는 것을 확인할수 있습니다.

'Challenge > CTF' 카테고리의 다른 글

[Intent CTF] Etulosba  (0) 2021.11.25
[Intent CTF] Careers  (0) 2021.11.22
[2021 hspace] Baby_Crypto  (0) 2021.05.07
[DiceCTF] web/Web Utils (2)  (0) 2021.03.09
[DiceCTF] web/Web Utils (1)  (0) 2021.02.23

+ Recent posts