annyoung

파일 다운로드(LFI) 취약점, 레터럴 무브먼트, AWS WAF 본문

모의해킹

파일 다운로드(LFI) 취약점, 레터럴 무브먼트, AWS WAF

nopsled 2025. 9. 25. 13:59

파일 다운로드(Local File Inclusion)

이번 모의해킹에서는 SpingBoot를 사용하고 있으나 초기에? 사용하던 레거시한 기능에서 파일 다운로드 취약점을 발견했다.

 

원래 파일 다운로드 취약점, 속히 말하면 LFI(Local File Inclusion) 취약점을 발견하면 이 취약점을 이용해 어디까지 내부 탈취가 가능한가까지 진행하는데, 그 이유는 passwd 고작 그거 받아서 뭐할 수 있는데? 하는 개발자나 윗분들의 생각으로 인해 더 깊게 진행한다.(이런 하나하나의 디테일이 보고서의 퀄리티가 달라지기 때문이기도함)

 

우선 첫번째로, 변태스럽긴한데 passwd를 다운로드 받아 붙어있는 쉘을 확인해서 이에 맞는 history들을 확인한다. 그리고 이후에는 하나하나 확인하는 과정이 필요하다. 개발자들이 로그인 후 실행되는 경로부터 cd ..까지 생각하고 역추적해서 소스코드 경로까지 확인하고 RDS/DBMS 접근 엔드포인트 등을 탈취해서 실제 접속해본다.

 

https://some-api.example.com/download.jsp?url=file:///etc/passwd

그리고 이번에 하다가 실수로 안건데, 안되는 경우도 있겠다만 LFI에서는 file scheme를 많이들 사용해서 파일을 다운로드 받는다.
게다가 위와 같이 특정 많이들 사용하는 경로를 추정해서 다운로드하고 있을거다.

 

https://some-api.example.com/download.jsp?url=file:///home/ubuntu

하지만, 잘 생각해보면 로컬 브라우저에서 file:/// 접속하면 리스팅되는걸 볼 수 있는데, 이처럼 리스팅 되는 효과를 기대할 수 있다. 그렇기에 취약점마다 다르지만 특정 경로를 몰라도 특별한 경우 디렉토리내 목록들을 다운로드 받아볼 수 있기도하다.

 

레터럴 무브먼트(lateral movement)

이 파일 다운로드 취약점을 이용해서 내부 아이피(VPC, 사내망 등)에서만 접근 가능한 백오피스, 그룹웨어, git, swagger, 내부 DNS로만 구성 및 운영되는 서비스에 침입할 수 있다. 속히 말하면 레터럴 무브먼트에 사용될 수 있다는 점이다.

 

서브도메인 정도는 구글링하면 쉽게 찾아지는데, CNAME이 없는 경우가 있다. 또는 아이피가 매핑되어 있어도 접속이 안되는 경우가 있는데 이럴때 LFI를 이용해서 접근하면 우회되어 접근되는 경우가 있다. (모의해킹만 하는 상황에서 잘 안쓰긴 하나, 모의침투인 경우 하는 편이긴함..)

 

대략적으로 다음과 같이 사용하곤한다.

(localhost를 이용한 리버스 프록시 서비스 확인) https://some-api.example.com/download.jsp?url=http://localhost:8080
(svn, git, gitlab 확인) https://some-api.example.com/download.jsp?url=http://(svn|git|gitlab).example.com
(그룹웨어) https://some-api.example.com/download.jsp?url=http://gw.example.com

https://some-api.example.com/download.jsp?url=https://some-api.example.com/v2/api-docs
https://some-api.example.com/download.jsp?url=https://some-api.example.com/swagger-ui/index.html
 - 이 경우엔 Swagger 있는거 확인(Swagger 엔드포인트 접근시 다른 엔드포인트들 접근시 지연 속도, 403 에러 등) 했는데 외부 아이피로 접근안되는 경우

 

AWS WAF

Cloudfront 사용하면 화가나게도 대다수 AWS WAF를 두고 있는 경우가 많다. 그렇다고 예외처리를 해주진 않으니 취약점이 덜 나오기도한다.

 

(AWS)WAF가 없고 접근하는 아이피를 웹 어플리케이션에서 소스코드로만 구현하는 경우 X-Forwarded-For 헤더로 우회가 가능하다. 여기에 들어갈 아이피는 그룹웨어 IP, 사내망 IP, 사설 IP, 내부 서버 IP, loopback 등 다양하게 존재한다. (AWS WAF 있으면 안되니까 꿈깰것.. 단 WAF ACL 설정이 안되어 있다면 가능한 소리)

 

또한, 사내에 설치해서 사용하는 WAF 기준으로 SQL 인젝션 중 싱글쿼터, 더블쿼터, #(hash sign) 등을 탐지하고 바로 차단해버리고, 파일 업로드할 때는 웹쉘의 System 관련 구문이 있는 경우 차단시키는데, 하나만 추가하면 우회가 가능한데 해당 메커니즘은 나중에 협업하게되면 알려주도록 하겠다! (단, 클라우드 WAF는 안된다는게 슬프다 ㅠ)

'모의해킹' 카테고리의 다른 글

mitmproxy response 변조  (0) 2025.10.21
mitmproxy로 네트워크 패킷 수정하기  (0) 2025.10.16
AWS public S3  (0) 2025.06.19
AWS accessKey  (1) 2025.06.18
Swaager에 대해서  (0) 2025.03.05
Comments