** 모의해킹
워라벨
-> 정보보안팀
모의해킹 팀.
보안컨설팅.
IT
-- File Upload
What : 공격자가 임의의 파일을 업로드 할 수 있는 공격
-> 웹 쉘.
-> 서버 장악.
웹 쉘이라는 건 사실 한 줄로도 만들 수 있음
<?php echo system($_GET['cmd']); ?>
** Point **
1. 우리가 웹 서버에서 실행할 수 있는 파일
2. 그걸 실행할 수 있어야함. (가장 중요)
-> 업로드된 파일의 위치를 알아야 함.
만약 mal.php 라는 파일이 있다면?
웹 브라우저로 우리가 올린 파일을 요청하면 됨.
그럼 was에서 php 파일을 실행하고 우리(요청자)에게 전해주게 됨
웹 쉘을 띄웠을 때 가장 먼저 대부분 어떤 일을 할까?
대부분 소스코드를 탈취함
** 소스코드 탈취.
-> DB를 탈취 한다는 말과 동일
> 왜냐면 DB의 계정 정보는 반드시 소스코드 내부에 들어가있을 수 밖에 없기 때문
** Reverse Shell
(실제 공격할 때 많이 사용 / 실습 때는 안했음)
Inbound 정책은 뚫기 어렵지만, Outbound 정책은 막기 힘듬
특히 443번 포트는 HTTP 포트이기 때문에 거의 항상 열려있음
(nc - nvlp 443 을 하면 reverse shell 연결이 될 때가 많음)
파일의 위치를 알아내는 법
> 내가 올린 파일을 직접 다운로드 받아보는 것
(서류 제출, 이미지 첨부, 게시판 등등등)
다운로드를 못할 때 쓰는 방법
1. SQL Injection을 시도해서 게시판 table의 file 컬럼 확인
2. HTML 소스코드 주석 살펴보기
GitHub에 Reverse cheat sheet 라는 게 있음
또는 구글링으로 php reverse shell
* Bypass Trick
-- Content-type
> 컨텐트 타입이라는 건 파일의 인코딩 방식을 알려주는 것임
확장자가 아니라 클라이언트가 보내는 요청의 정보 안에
Content-type이라는 부분이 있음
만약 jpeg image파일을 업로드하면 Content-type에 image/jpeg라고 적힌다.
php 파일을 올리면 text/php라고 적힌다.
이 부분을 변조한다고 해서 우리한텐 아무런 일도 일어나지 않기 때문에
(순전히 서버에게 어떤 파일인지를 알려주는 용도)
Burp Suite의 intercept를 켜서 바꿔 보내면 됨
-- 업로드 되는 디렉토리 실행
어떤 환경에서는 아무리 업로드를 해도 파일이 실행되지 않고
내가 적은 코드 텍스트 그대로를 문자열처럼 출력하는 환경일 수가 있다.
이럴 때 만약 webshell.php라는 파일을 올린다면 filename="../webshell.php"로
올리는 것이다. 그럼 상위 디렉토리에 저장되는 것이다.
../를 필터링 하고 있을 수도 있음
그럼 / 를 %2f라는 걸로 인코딩 시켜서 ..%2fwebshell.php로 업로드할 수 있음
-- 블랙리스트 기반 필터링 우회
php 파일이라고 해서 php 확장자만 실행하는 게 아님
php3, php5 같은 확장자도 존재
jsp 같은 경우도
jsp, jspx 같은 것들이 있다.
결국 필터링 하는 그 단어만 안 쓰면 됨
-- 확장자 우회
우리가 올리려는 파일의 맨 뒷부분만 보는 거임
test.png.php
test.php%00.png
(여기서 %00은 null data임)
test.php.png -> 이건 실행이 안 됨(인터넷에 잘못 나와있음)
끝이 무조건 php라고 끝나야 컴퓨터에서 php라고 인식하고 실행함
test.php.png 가 실행되게 하려면 설정 파일을 건드는 것임
AddType application/x-httpd-php .bokyu
이라고 하는 것이다. 이건 bokyu라는 확장자도 php로 실행하세요 라는 의미
애초에 이렇게 하면 test.png 라고 해도 실행됨 test.php.png는 의미없음
-- File 시그니쳐
> 이미지 파일.
> 맨 뒤에 웹쉘 코드 넣으면 됨
이미지파일 아무거나 하나 가져와서 그 뒤에 그대로 웹쉘 복붙
(jpeg 파일의 시그니쳐에 한 줄 웹쉘을 그대로 넣고 Burp Suite으로 전송)
-------------------------------------
- PUT Method
대부분 GET과 POST만 쓰고 있지만 사실 HTTP 에는 PUT이라는 통신 방식도 존재
그래서 PUT webDAV이 켜져있다면 PUT으로도 파일을 업로드할 수 있음
그런데 PUT 은 조심해야 함
메인 페이지 전체가 날라갈 수도 있음
** 모의해킹 시 주의해야할 점.
XSS 시에, 제목 <script>console.log();</script>
자주 이용하기
alert 보다는 console.log가 매너있게 xss를 테스트할 수 있음
게시판 글 쓸때, 수정기능 이용하기
반드시 Repeater를 이용해서 스크립트를 삽입하기
** 파일 업로드
(1) 실제 웹 쉘 x (다른 해커가 사용할 수도 있기 때문에)
<?php
echo "Script Run";
or 날짜 출력.
?>
(2) 업로드 테스트 파일 내역.
- upload/test.html
- upload/test.php
**** WebShell 직접 만들기.
<?php ?>
'해킹 > Web Hacking' 카테고리의 다른 글
File Upload 취약점 대응 방안 - BLOB / CLOB 구현 (0) | 2023.06.14 |
---|---|
[11주차] 해킹 스터디 정리 - File Download 공격, LFI 취약점 (0) | 2023.06.08 |
[9주차] 해킹 스터디 정리 - CSRF Token, SSRF, File Upload 공격 (0) | 2023.05.25 |
[8주차] 해킹 스터디 정리 - XSS Bypass, 대응 방안, CSRF 공격 (0) | 2023.05.18 |
[7주차] 해킹 스터디 정리 - Reflected XSS, DOM XSS (0) | 2023.05.13 |