Study
EDB-49375 본문
1. 개요
EDB ID | EDB-49375 |
분류 | Unrestricted File Upload to RCE |
대상 어플리케이션 | Responsive E-Learning System 1.0 |
취약 코드 | \elearning\admin\add_student.php \elearning\admin\add_teacher.php |
실행 환경 | Apache 2.4.46 / PHP Version 7.4.9 / Windows 7 x64 |
1.1 대상 어플리케이션 설명
: E-Learning 시스템으로 구성되어있는 사이트이다.
E-Learning 시스템의 사용자는 3가지로 분류할 수 있다.
- Admin
- Teacher
- Student
● home
● Admin page
관리자 홈페이지는
학생 · 교사 추가, 강좌 · 부서 · 주제 추가 등의 기능을 제공한다.
위 기능들 중 학생 · 교사 추가에서 파일을 업로드하는 기능이 있다.
1.2 공격 시나리오
1. admin 페이지 접근 및 로그인
2. Student 클릭하여 http://localhost/elearning/admin/student.php 로 이동
3. Add Student 클릭 후 정보 입력, Image: 부분에서 웹 쉘업로드
4. http://localhost/elearning/admin/uploads/ 로 이동하여 3에서 올린 웹 쉘 실행
5. 시스템 명령 수행 후 결과 출력되는지 확인
-> 5번까지 성공한다면 시스템 장악으로 인한 주요정보 탈취 및 변조 , 인접 서버에 대한 침입 시도 가능
add_teacher.php 또한 같은 취약점이 존재한다.
2. 상세 분석
2.1 발생원리
- \elearning\admin\add_student.php 소스코드에서
업로드 되는 파일에 대한 확장자 검증이 이루어지지 않아 발생한다.
2.2 취약점 확인
Add Student 클릭 후 정보 입력, Image에 webshell.php파일 업로드
Save를 눌러 저장하고
오류없이 저장이 되었다면 확장자가 jpg, png 등이 아닌 php인 파일임에도 불구하고 업로드 된 것이다.
그리고
http://localhost/elearning/admin/uploads/ 로 이동하면
업로드 된 파일 목록에서 webshell.php를 확인할 수 있다.
webshell.php 클릭해 실행 후 시스템 명령어를 입력한다.
올바르게 결과가 출력되었으며 다른 시스템 명령어들도 잘 수행 된다.
이로써 웹 서버 장악이 가능하다.
3. 대응 방안
\elearning\admin\add_student.php 소스코드에서
파일 업로드 부분을 아래와 같이 수정한다.
- image 파일 업로드 기능이므로 jpg, png, jpeg, gif 확장자 파일만 허용해야 한다.
- 특수문자 우회 공격을 막기 위해 % 와 ; 를 필터링한다.
º 종단문자를 이용한 우회 공격: "%00" , "%ZZ", "%09", "%13"
º 세미콜론을 이용한 우회 공격
: 세미콜론을 포함한 웹 페이지 요청 시 파싱 대상이 세미콜론 앞쪽만 인식해 발생하는 취약점
- 확장자 연장 우회 공격을 막기 위해 확장자 필터링을 ' . ' 를 기준으로 맨 마지막부터 해야 한다.
수정된 코드가 제대로 작동하는지 확인 결과
webshell2.php파일이 선택은 되지만 Save를 누르면
다음과 같이 alert창이 뜨고 webshell2.php는 저장되지 않는다.
4. 참고자료
- Exploit-DB
www.exploit-db.com/exploits/49375
-Web shell
github.com/rinechran/Hws/blob/master/WebShell/exec.php
-KISA
주요정보통신기반시설_기술적_취약점_분석_평가_상세_가이드_2017.pdf (667p-673p)
'웹 보안 > Exploit-db' 카테고리의 다른 글
EDB-49420, 49428 (0) | 2021.01.27 |
---|---|
EDB-49431 (0) | 2021.01.22 |
EDB-47583 (0) | 2021.01.13 |
CVE-2020-25762 (0) | 2021.01.06 |
EDB-ID-48822 (0) | 2020.12.30 |