해당 게시글은 정보글이 아닌 공부 메모글입니다.
목차
1. 파일 업로드
2. Bypass Trick
3. 모의해킹 시 주의사항
1. 파일 업로드
아래의 코드 한 줄만으로도 서버를 장악할 수 있습니다.
<?php
echo system($_GET['cmd']);
?>
1 - 1. Point
1. 웹 서버에서 실행할 수 있는 파일을 업로드합니다.
2. 업로드된 파일의 위치를 알아내야 합니다.
3. 업로드한 파일을 실행할 수 있어야 합니다. (웹 브라이저로 업로드한 파일을 URL 주소로 요청하면 됩니다.)
1 - 2. 서버 장악
Burp Suite에서 알아낸 URL 주소를 Repeater로 보내서 'cmd' 파라미터를 받게 할 수 있습니다.
www.~~~/webshell.php?cmd=id
서버를 장악하면 가장 처음에 해보는 것은 cat+/etc/passwd로 확인합니다.
그리고 공격자는 cat+../../security.php를 통해 php 소스코드를 탈취하는 이유는 DB를 탈취하는 것이나 마찬가지입니다.
1 - 3. Reverse Shell
하지만 Repeater로 파라미터를 수정하며 리눅스 명령어를 입력하는 것은 한계가 있습니다.
그렇기에 장악한 서버의 포트를 nc -nvlp 443를 통해 열고 해당 포트를 이용해서 서버에서 Shell을 연결시키게 하는 방법을 활용합니다.
Bind Shell은 정방향 연결이고, Reverse Shell을 역방향으로 연결합니다.
주로 Reverse Shell을 이용하는데 그 이유는 서버의 포트를 열어도 방화벽이 있어 장악한 서버의 포트를 이용해서 들어가지 못합니다. 그래서 반대로 장악한 서버가 해당 포트를 통해 공격자의 컴퓨터에 연결하게 하는 방법을 선택합니다.
서버 방화벽은 443 포트는 무조건 API 때문에 열려있습니다. 이를 이용해서 Reverse Shell을 적용합니다.
1 - 4. 주소 알아내는 방법
1. SQL Injection을 시도해서 DB의 Table에 업로드한 파일의 정보가 나올 수 있습니다.
2. HTML 소스코드 주석 살펴봅니다. (업로드 경로가 간간히 주석으로 남아있는 경우가 있습니다.)
3. Web Shell 올리고 파일 업로드 공격을 시작합니다.
파일 업로드 취약점은 사실 거의 모든 것을 장악할 수 있기 때문에 그만큼 가장 중요한 취약점이기도 합니다.
2. Bypass Trick
2 - 1. Content-Type 우회
파일 업로드하는 곳! 예를 들어 프로필 사진 설정에서 사진을 업로드하는 곳에선 이미지 타입의 확장자만 업로드할 수 있게 만들어 둬서 다른 파일의 확장자를 막는 경우도 있습니다.
content-type을 통해 데이터의 인코딩 방식을 웹 서버에 알려주는 코드입니다.
content-type = image.jpg을 content-type = image.php로 변조해서 요청을 보내면 됩니다.
2 - 2. Upload Directory 우회 (Directory Traversal)
업로드되는 디렉토리를 실행하지 못하게 막는 경우도 있습니다. 이런 경우 php파일을 아무리 올려도 php파일 실행이 안될 때가 있습니다.
Directory Traversal를 사용하면 됩니다.
요청에서 filename="/webshell.php"의 경로에 있는데 filename="../webshell.php"와 같이 상위 디렉토리에서 저장되게 하면 됩니다.
Burp Suite의 응답에서 저장 위치에 저장이 되는지 확인해봐야 합니다.
하지만 이것도 막힐 경우엔 URL 인코딩으로 "..%2fwebshell.php"와 같이 우회할 수도 있습니다.
2 - 3. 블랙리스트 기반 확장자 필터링 우회
php가 필터링된다면 pphhpp를 사용하는 경우도 있겠고 php5 등과 같이 우회할 수 있습니다.
webshell.png.php : 마지막 확장자가 php라 php로 실행이 됩니다.
webshell.php%00.png : %00은 null이라 뒤에는 없는 거나 마찬가지입니다.
AddType application/x-httpd-php .hani를 활용하면 확장자가 이상해도 해당 파일을 php로 실행되게 할 수 있습니다.
하지만 .hani라는 확장자가 업로드가 될지 안될지도 모르고 만약 올라간다면 더 쉬운 방법이 있기에 굳이 이러한 방법을 사용하진 않습니다.
2 - 4. File Signatures
각 파일의 확장자에는 파일 시그니처가 있습니다.
파일 시그니처 안에 맨 뒤에 php 코드를 넣어서 Content-Type에 맞는 확장자에 맞춰서 업로드합니다.
하지만 php 확장자가 아니어서 실행을 못 시킬 수 있다고 생각할 수 있지만 업로드한 파일 경로(URL)를 통해 해당 파일을 실행하면 php 코드가 실행이 됩니다.
2 - 5. PUT Method
요청 메소드는 GET, POST만 있는 것이 아니라 PUT 등의 메소드들이 있습니다.
webDAV 기능이 켜져 있는 경우가 있는데 이를 이용하면 요청하는 URL 경로에 파일을 업로드할 수 있습니다.
조심하지 않을 거면 PUT 메소드는 절대 사용하지 않는 것이 좋습니다.
해당 경로에 파일을 올리는 공격이라 잘못 올리게 되면 아주 큰일 날 수 있습니다.
PUT 메소드로 파일을 업로드하는 것은 동일 이름으로 파일이 있으면 덮어 씌기가 되기 때문에 매우 조심해야 합니다.
3. 모의해킹 시 주의사항
3 - 1. Repeater 활용하기
게시판에 글을 쓸 때는 수정 기능을 이용해서 해킹합니다. (기존 글을 아무거나 쓰고)
XSS는 반드시 Repeater를 이용해서 script를 삽입합니다.
3 - 2. Burp Suite에서 Logger 활용하기
Burp Suite에서 Logger라는 기능을 잘 이용하면 됩니다.
모의해킹 중 잘못한 게 없는데 웹 서버에서 접속이 안 되는 경우가 있으면 Logger에서 증거를 보여주면 됩니다.
3 - 3. script 테스트
<script>console.log</script>
<img onmouseover="" />
3 - 4. 파일 업로드 시 주의할 점
3 - 4 - 1. 실제 웹 쉘 코드를 일단 올리지 않고 테스트 php 코드를 올립니다.
echo "hello";와 같이 테스트를 해보고 실행이 된다면 담당자에게 알려줘서 여기서 해킹을 더 진행할지 아니면 멈출지를 물어봅니다.
3 - 4 - 2. 업로드 테스트한 파일 내역을 정리해 두는 것이 좋습니다.
경로와 파일(이름과 확장자)을 정리해 둬야 담당자가 나중에 삭제할 수 있습니다.
3 - 4 - 3. 웹 쉘 코딩은 무조건 직접 만들어야 합니다.
혹시라도 인터넷에서 긁어와서 쓰다가 악성코드가 숨어져 있을 수도 있기에 직접 코딩해야 합니다.
모의해킹 팁!!
HASH는 암호화가 아닙니다.
암호화는 복호화가 가능해야 합니다.
HASH는 복호화가 안됩니다.
다른 것이기 때문에 암호화 안에 HASH가 들어갈 수 없습니다.
'개발자 (Developer) > 공부 (Learn)' 카테고리의 다른 글
교육 - SQLi (0) | 2023.09.03 |
---|---|
11주차 - 파일 다운로드의 개념과 대응 방안 (0) | 2023.06.08 |
8주차 - XSS와 CRSF (0) | 2023.05.18 |
7주차 XSS - Reflected, DOM Based (0) | 2023.05.11 |
6주차 XSS (0) | 2023.05.11 |
댓글