>> 소스코드 분석
# list.php
line 26~32의 php에 의해,
현재 위치 아래의 uploads 폴더 내 파일들(중 .., ., index.html는 제외)의 list가 출력된다.
# upload.php
※ move_uploaded_file(A, B)
: 파일 A가 php의 HTTP POST 방식으로 업로드 되었는지 확인한 뒤 B로 옮김
이용자는 http://host1.dreamhack.games:[PORT]/uploads/[FILENAME] URL을 통해 파일에 접근 가능
>> exploit
# 공격자는 뭘 할수 있는가?
어떤 파일이든 서버에 올릴 수 있다.
# 그 파일로 뭘 수행해야 하는가?
이 파일이 실행됨으로써,
서버가 "cat /flag.txt" 명령어를 실행하고 그 결과를 브라우저에 띄워서, 공격자가 flag.txt를 읽을 수 있어야 한다.
# 최종 exploit
1.
2.
html의 form을 통해 공격자의 임의 입력을 받고,
이것이 system() 내에 들어가
결국 서버가 임의 명령어를 실행하게 된다.
※ form은 일반적으로 POST 방식으로 받는 줄 알았는데 여기서는 GET이며,
GET 방식은 POST 방식과 달리 URL에 데이터가 노출된다.
여기서 이걸 쓴 이유는 잘 모르겠다☆♡
>> mitigation
# 파일 확장자 제한
동적 리소스 확장자 제한 -> RCE(Remote Code Execution) 공격 예방
※ 웹 리소스는 크게 정적 리소스(Static Resource)와 동적 리소스(Dynamic Resource)로 분류됨
정적 리소스: 서버에서 실행되지 않음 (eg. JPG, PNG, GIF, MP4, MOV)
동적 리소스: 서버에서 실행되는 것 (eg. PHP, JSP)
# AWS, Azure, GCP 등의 정적 스토리지 이용
서버의 파일 시스템을 이용하지 않음 -> 악성 파일이 업로드되어도 웹 서버 공격으로 이어지지 않음
'IT > Wargame' 카테고리의 다른 글
[System Hacking] out_of_bound (0) | 2024.07.10 |
---|---|
[Web Hacking] file-download-1 (0) | 2024.07.09 |
[Web Hacking] command-injection-1 (2) | 2024.07.08 |
[Web Hacking] Mango (0) | 2024.07.07 |
[Web hacking] simple_sqli (0) | 2024.07.07 |