겉바속촉

[보안] 경로조작 본문

IT 일기 (상반기)/네트워크 및 시스템 보안

[보안] 경로조작

겉바속촉 2021. 2. 12. 16:46
728x90
반응형

 

 

 

다운로드 기능 구현시 유의사항

 

외부 입력값이 서버 내부 파일을 참조하는 용도로 사용되는 경우(= 파일 식별자로 사용되는 경우),

경로 조작 문자열(. .. / \ 등) 포함 여부를 확인하지 않고 사용하여 권한 밖의 파일에 접근할 수 있는 취약점

 

 

 

 

 download.jsp?filename=/data/upload/cat.jpeg  ---> 파일의 저장 경로가 노출되는 문제점

 ~~~~~~~~~~~~

 File f = new File(filename);

 f.read(...)



 download.jsp?filename=cat.jpeg

 ~~~~~~~~~~~~

 File f = new File("/data/upload/" + filename);  ---> 물론 위의 경로와 결론은 동일하지만 캡슐화를 했다는 것이 차별점

 f.read(...)

 

 

 

저렇게 해주는 이유는 바로

내부 처리 로직을 캡슐화하기 위해서입니다.

내부 저장소를 외부에서 모르게 하는 것이 가능하쥬!!!

 

 

 

 

 

 download.jsp?filename=../../../../../../../etc/passwd  ---> 해당하는 파일이 어떠한 경로에 있는 지 모르지만
                                                                       ../ 를 무작위로 넣어 루트로 가게 합니다.

 ~~~~~~~~~~~~

 File f = new File("/data/upload/" + filename);     ---> 결국 /data/upload/ 부분을 무력화시키는 겁니다.

 f.read(...)

 

 

 

 

 

경로조작에 대해서 다시 정리해보면~

 

 

외부 입력값이 파일의 식별자로 사용되는 경우

경로 조작 문자열(. .. / \ 등) 포함 여부를 확인하지 않고 사용하는 경우 

 

⇒ 권한 밖 파일에 대한 접근이 가능합니다!!!!!!

 

 

 

 

 


 

 

WebGoat에서 한 번 해보도록 하겠습니다:)

 

 

 

 

 

Access Control Flaws - Bypass a Path Based Access Control Scheme 로 가겠습니다.

 

 

 

 

도움말 제공페이지 입니다.

도움말은 저 페이지에서 알려주는 디렉터리에 파일형태로 존재하고 있습니다.

 

 

windowXP로 가서 저 경로대로 열어볼게요!!

그럼 저 WebGoat사이트에 있는 파일들이 주르륵 쌓여있습니다.

 

 

 

 

방법1) 개발자 도구 활용

 : 사용자 화면에서 브라우저가 제공하는 개발자 도구를 이용하는 것입니다.

 

 

 

이제 개발자도구를 킨 상태에서 하나 클릭해볼게요

 

 

해당 value를 다음과 같이 고쳐주었습니다.

../../../../../../../../../../../../../SecureCoding/tools/apache-tomcat-6.0.24/conf/tomcat-users.xml

 

이렇게 바꿔준 값을 서버로 전달해줄 것입니다.

 

View File을 클릭해주면~~ Congratulations!!

 

 

 

이렇게 성공하고 나면 서버에 있는 원래 접근할 수 없는 내용이 출력이 됩니다.

 

 

 

 

방법2) proxy 활용

  : 프록시 도구를 이용해서 서버로 전달되는 값을 변경하는 것입니다.

    변경된 값이 파일의 식별자로 경로 조작 문자열 포함 여부를 검증하지 않고 사용 ⇒ 권한 밖 파일에 대해 접근이 가능

 

 

 

Intercept를 on으로 해둔 상태에서 WebGoat의 파일 하나를 클릭해주었습니다.

 

 

그럼 위의 파일 경로를 또 바꿔주는 것이쥬!!

다음과 같이요!!

 

 

그래도 아까와 동일하게 Congratulations 나오죠?!

 

 

 


 

이번에는 @Attacker 가상머신에서 bee-bx/bWAPP으로 가볼게요

 

 

그리고 Choose your bug 클릭해서 골라줄 것!!

 

 

 

 

 

 

해당 페이지에 해당 시스템의 사용자 정보(/etc/passwd)가 출력되게 해야합니다.

 

 

힌트는 다음 보이는 message.txt 입니다.

 

아마도 파라미터 값으로 넘어가는 것이 특정 파일명인 것 같쥬??

그렇다면 내부처리는 특정 디렉터리의 파일을 읽어서 출력해내는 것일 겁니다.

 

 

경로조작을 해주어야겠죠?!

../../../../../../../대략 이쯤이면 될 것같다~할때까지 넣어주고 /etc/passwd 라고 입력!!

다음과 같이 주르르르륵 다 나오고있죠?

 

 

입력값 자체가 파일 식별값으로 쓰고 있음을 우리가 얼른 알아차려야했던 것이 포인트입니다.

 

 

Access Control Flaws - Bypass a Path Based Access Control Scheme 

728x90
반응형