-> 공격자가 임의의 파일을 업로드 할 수 있는 공격
-> 사실상 web shell공격 == 서버측에서 실행가능한 파일을 업로드 할 수 있는 공격
<?php system($_GET['cmd']); ?>예전에 썼었던 페이지나 지금 사용하지 않는기능에서 주로 발생
보통 주석처리되거나 여러경로를 통해 알게됨
-> 이중확장자(double extension)
ex) shell.png.php(o) / shell.php.png(x)
개발자가 업로드할때 .뒤에 확장자만 체크하게 설정되어 있어 두번째 확장자는 체크 하지 않는 것
-> shell.png.php이름으로 업로드하면 첫번째 확장자만 체크하여 shell.png.php 로 저장되어 php실행
-> ex) shell.php%00.jpg
업로드할때 원하는 확장자를 앞에적고 그뒤에 NULL값을 넣음으로써 NULL값부터 뒤는 저장되지 않게하는 방법
-> shell.php%00.jpg 업로드
-> 확장자가 jpg로 설정되어있어 업로드 필터링 통과
-> 저장될때 NULL값뒤는 사라지기 때문에 shell.php로 저장되어 실행가능
ex)
파라미터 전달
aaa.com?lang=kor.php
코드
include <?= $_GET['lang']?>;
webpage 파라미터의 값에 따라 다른페이지를 보여줌
ex) index페이지 불러옴
aaa.com?lang=kor.php->aaa.com?lang=index.php
| 장점 | 단점 |
|---|---|
| 존재하는 모든페이지를 가져올수 있음 | 소스코드(서버측 실행언어)는 못가져옴 |
| 서버측 언어를 실행하고 결과를 출력하기때문에 웹쉘이용가능 | 소스코드를 못가져오는 이유는 서버측 언어를 실행하고 결과를 출력하기때문 |
다운로드 경로를 확인했을때 aaa.com/download_2/download.php?filePath=/sss/test.pHp에서 download.php와 같은 어떤파일을 전달해주는 웹요청을 발견했을때 추측가능
ex)download.php
$fileName=$_GET['fileName'];
download('/file/',$fileName);
//download는 특정결로에 있는 파일을 전달해주는 함수(실제로는 없음)
download.php로 보내는 파라미터 값에 ../../../../etc/password와 같은 중요한 파일 경로를 입력하면 나옴
| 장점 | 단점 |
|---|---|
| 소스코드 다운가능 | 소스코드 실행 불가능 |
| 리눅스 | 윈도우 |
|---|---|
| poc | /boot.ini |
etc/password | /winit/win.ini |
Normaltic Study 15주차