Part.1
File Upload : 공격자가 임의의 파일을 업로드할 수 있는 공격
web shell 공격 : 서버 측에서 실행 가능한 파일을 업로드할 수 있는 공격
windows server에서 IIS라는 웹서버가 띄어져있고 우리가 exe파일을 업로드했다고 할때 어떻게 실행할까?
웹서버에서 php 파일을 실행할 수 있다고 하자. reverseShell.php 파일을 업로드가 있다. 어떻게 실행할까? : 웹요청으로 실행
php파일은 달라고 요청하면 웹서버는 php 파일을 실행하기로 설정되어있기 때문에 이를 실행하고 우리에게 그 결과를 알려준다.
그래서 파일의 경로(위치)를 정확히 알아야한다. 때로는 파일 명을 바꿔서 올리는 경우도 있기 때문에 이를 어떻게 해결할지도 고민해야함.
Part.2
Image Web Shell
webshell.php는 업로드할 때 올라가지 않는데 webshell.php.jpg를 올리면 뚫리는 경우가 있다고 말하는 사람들이 있다. -> 이는 실행될 수가 없다.
file upload bypass를 검색하면 double extension(이중확장자)라는 개념이 나온다.
webshell.jpg.php이런식으로 업로드할 때 우회가 될 수 있다.
- 웹 어플리케이션을 개발할 때 .을 기준으로 첫번째 두번째 경우만 보고 jpg로 인식하는 경우가 있다.
Null Byte Injection
webshell.php%00.jpg로 올린다면 웹 어플리케이션에서 정상적으로 제일 뒤만 체크할 때 jpg로 인식하는데 서버(특히 리눅스)에서 저장될때는 %00에서 끊기고 php파일이 업로드가 된다.
* 워게임에서는 되는 경우가 있다. 왜 될까?
웹서버에서 .php.jpg가 될 때 .php로 실행시키게 해줘라고 설정한 것
문제를 잘못 만든 사례다.
* 악성코드를 유포할 때 확장자를 속이는 방법
normaltic.pdf.exe를 뿌릴 때 윈도우에서 기본확장자를 숨기는 설정이라면 normaltic.pdf로 인식하는 경우도 있다.
* 또 다른 우회방법
webshell.php.jpg를 실행할 수 있는 방법?
.htaccess : 아파치에서 설정하는 웹 설정 파일. 여기서 서버에서 실행할 확장자를 설정할 수 있다.
AddType application/x-httpd-php .normaltic 이런식으로 .htaccess파일을 업로드하면 normaltic확장자 파일은 php처럼 실행해라는 규칙을 적용할 수 있다.
.htaccess는 해당 directory만 영향을 받기 때문에 .normaltic 파일을 이후에 업로드하면 해당 확장자 파일이 실행되는 것을 확인할 수 있다.
HTTP 프로토콜의 한계는 연결이 지속되지 않기 때문에 다른 디렉토리의 정보를 얻기 어렵다. 그래서 Reverse Shell도 같이 올리게 된다.
Part.3 File Include 취약점
공용 컴포넌트의 취약점
파라미터의 값에 따라서, 다른 페이지를 보여주는 상황.
서버에서 원하는 파일을 가져올 수 있다고 가정하자.
db 계정이 적혀있는 파일을 가져오고 싶다.
login.php 파일을 가져오려고 하면 소스코드를 가져오는 것이 아니라 php 파일을 실행해서 가져다 준다.
File Include 취약점은 서버에서 원하는 파일을 가져올 수 있지만 소스코드는 가져올 수 없다.
실행이 된다는 것을 역이용해보자.
jpg를 올리고 File Include 취약점을 활용해서 php 파일을 실행할 수 있다.
LFI(Local File Include)취약점이라고 부른다.
OSCP / 침투테스트 : 해킹 공부를 해보면 좋다.
Part.4
파일 업로드 기능이 없다면 어떻게 해야할까?
접속한 기록은 웹로그가 남는다.
만약 로그의 위치를 알아냈다고 하자.
GET 뒤에 <?php system($_GET['cmd']); ?>를 넣고 올리면 잘못된 요청이기 때문에 400에러가 뜬다. 하지만 로그가 남게된다.
access_log&cmd=ls 이런식으로 GET을 올리면 결과 값에 실행 결과가 보인다.
File Upload 대응방안
1. 파일 이름 난독화 : 파일 경로를 감추는 전략
2. 다운로드가 있는데 경로를 모를 수도 있나? : 업로드 한 파일을 웹 경로 어딘가에 저장해두고 직접 접근해서 다운로드하도록 구현해서 그렇다. 인가 취약점 문제점이 존재한다. 보통 다운로드 php파일을 별도로 만든다. download.php?fileId=123 이런식으로 다운로드하게 한다. 프로필 사진의 경우는 경로가 노출될 수도 있다.
단순히 fileId=123 뒤에 숫자를 변경해서 권한 없는 파일을 다운가능할 경우 불충분한 인가 취약점이라고 부를 수 있음.
3. 확장자를 화이트리스트 기반 필터링 : 블랙리스트는 우회가 가능하다. DB에 txt가 아니라 binary(BLOB, CLOB)파일을 저장하면 실행할 여지가 없어진다.
4. NAS 파일 저장 서버를 별도로 둔다. S3같은 php가 실행되지 않는 서버를 별도로 두는 것.
5. include 취약점은 별개의 취약점이라고 생각하면 된다.
Part.5 파일다운로드 취약점
download.php?fileName=test.txt라는게 있었다고 하자.
fileName에 ../../../../../Etc/passwd 이런식으로 올리면 다른것을 가져올 수 있다.
장점 : 소스코드 다운로드 가능
단점 : 소스코드 실행 X
파일 다운로드 취약점을 발견했다면 소스코드를 먼저 털어야한다.
다운로드 해야하는 파일
1. 윈도우 : /boot.ini, winnt/win.ini
2. 리눅스 : /etc/passwd
파일 다운로드는 엄청난 취약점이다.
java 소스코드 분석해보니까 sql Injection을 대거 발견할 수 있었음.
order_by 존재는 하지만 처리는 하고 있었음.
클라이언트 코드(javascript)가 난독화되어있으면 쉽게 풀어낼 수 있다.
리버싱 개념이 있다면 직접 리버싱해서 발견할 수도 있다.
LFI : 웹 서버 내에 있는 파일을 가져온다.
RFI : 외부 서버에 있는 파일을 가져온다.
파일의 시그니처를 확인하는 함수를 통해서 파일을 검증하는 경우도 있다.
Part.6 과제
1. 웹개발
2. Web Shell 3, GET Flag File, GET Flag File2
3. 파일 다운로드 기능 구현 / 로그인한 사람만 파일을 다운로드 받을 수 있게 설정
4. 파일을 DB에 저장하는 것 구현 : BLOB, CLOB
5. 내가 만든 웹서버에서 취약점을 찾고, 보고서 작성하기
'노말틱 모의해킹' 카테고리의 다른 글
[프로젝트 1주차 코칭] 모의해킹 시작이다! (0) | 2025.07.30 |
---|---|
[16주차 강의] 인증인가 취약점 (0) | 2025.07.30 |
[14주차 강의] Web Shell (1) | 2025.07.16 |
[13주차 강의] CORS와 CSRF (3) | 2025.07.09 |
[12주차 강의] CSRF (0) | 2025.07.02 |