'Develope/JSP'에 해당되는 글 3건

반응형

만약 XSS(Cross Site Scripting) 취약점이 발견되어 대응을 해야할 때 각 파라미터별로 원하는 문자를 모두 필터링 걸어준다는 것은 비효율적이라는 생각이 들었다.


그래서 XSS 방어를 위한 관련 라이브러리가 존재하지 않을까하여 찾아본 것을 공유한다.


1. StringEscapeUtils

 StringEscapeUtils 클래스는 Apache에서 공식으로 제공해주는 class이다. 해당 클래스에 대한 설명은 다음과 같이 나와있다.

Escape and unescape Strings for Java, Java Script, HTML and XML

 

설명에서 보는 것처럼 해당 클래스는 HTML 뿐만 아니라 Java, Java Script, XML에 대한 escape와 unescape도 제공을 해주고 있다.

하지만 이번 포스팅의 주제가 XSS인 만큼 HTML에 대한 기능에 대해서만 살펴보도록 하겠다.


 ◎ escapeHtml3(String input) : HTML entites를 사용하여 String 안의 문자들을 escape한다. HTML version 3.0을 escape하는 translator object이다.


 ◎ escapeHtml4(String input) : HTML entites를 사용하여 String 안의 문자들을 escape한다. HTML version 4.0을 escape하는 translator object이다.


 ◎ unescapeHtml3(String input) : entity escapes를 포함하는 문자열을 실제 유니코드 문자들로 entity escapes를 포함하는 문자열을 실제 유니코드 문자가 포함된 문자열로 unescape한다. HTML version 3.0을 unescape하는 translator object이다.


 ◎ unescapeHtml4(String input) : entity escapes를 포함하는 문자열을 실제 유니코드 문자들로 entity escapes를 포함하는 문자열을 실제 유니코드 문자가 포함된 문자열로 unescape한다. HTML version 4.0을 unescape하는 translator object이다.



간단하게 위의 class를 이용한 코드는 다음과 같다. 


import org.apache.common.lang3.StringEscapeUtils;

...

String text = request.getParameter("text");

text = StringEscapeUtils.escapeHtml4(text);

...


참고 : http://commons.apache.org/proper/commons-lang//apidocs/org/apache/commons/lang3/StringEscapeUtils.html





2. Lucy-XSS

Lucy-XSS는 naver에서 open source 형태로 제공해주는 XSS 관련 라이브러리이다.

해당 라이브러리에 대한 설명을 보면 이 library 또한 위에서 말한 StringEscapeUtils를 사용했음을 알 수 있다.


Lucy-XSS에는 XssFilter, XssPreventer 두가지가 제공되는데 각각은 다음과 같을 때 사용하라고 명시되어 있다.


XssPreventer : HTML 이외의 간단한 text 파라미터일 때에는 XssPreventer를 사용

XssFilter : 메일, 게시판 등 입력값으로 HTML 태그를 받을 경우에는 XssFilter를 사용


아래는 각각에 대한 간단한 코드이다.


XssPreventer

@Test

public void testXssPreventer() {

String dirty = "\"><script>alert('xss');</script>";

String clean = XssPreventer.escape(dirty);


assertEquals(clean, "&quot;&gt;&lt;script&gt;alert(&#39xss&#39);&lt;/script&gt;");

assertEquals(dirty, XssPreventer.unescape(clean));

}


◎ XssFilter

@Test

public void testSuperSetFix() {

XssSaxFilter filter = XssSaxFilter.getInstance("lucy-xss-superset-sax.xml");

String expected = "<TABLE class=\"Naver_Layout_Main\" style=\"TABLE-LAYOUT: fixed\" cellSpacing=\"0\" cellPadding=\"0\" width=\"743\">" + "</TABLE>" + "<SPAN style=\"COLOR: #66cc99\"></SPAN>";

String actual = filter.doFilter(clean);

assertEquals(expected, actual);

}


참고 : https://github.com/naver/lucy-xss-filter

반응형

'Develope > JSP' 카테고리의 다른 글

[JSP 보안] Secure Coding  (0) 2018.05.01
[JSP] kali linux에 JSP 개발환경 세팅  (0) 2018.03.31
블로그 이미지

rootable

,

[JSP 보안] Secure Coding

2018. 5. 1. 18:42

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

KALI에서는 ORACLE 설치가 어려우므로 정신건강을 위해 윈도우에서 설치하는 것을 권장드립니다... (제가 진행한 ORACLE 설치법은 알고보니 타 서버에 있는 ORACLE 서버에 bruteforcing을 통해 id와 pw를 얻어내는 툴 사용을 위한 것이었네요...ㅠㅠ)


* https://blog.lael.be/post/858

위의 블로그를 보고 순서대로 따라하면 된다.

다만 진행하다 발생된 이슈에 대해서만 정리한다.


1. sources.list 변경

칼리리눅스에서는 버전에 따라 sources.list를 변경해주어야 한다.


vi /etc/apt/sources.list

를 해준 뒤 아래의 홈페이지를 참고하여 버전에 맞도록 수정해준다.


http://www.kalitut.com/2014/06/fix-kali-linux-sourceslist-repositories.html


나같은 경우 2016.2 버전이므로 

For Kali Linux 2016 – Kali Rolling  use the repo below:

를 보고 하였더니 잘 해결되었다.


2. Service tomcat8 start

블로그를 보면 설치를 하면 바로 실행되는 것처럼 보인다.

하지만 서버를 시작해줘야 되는 것이므로 반드시 tomcat을 실행시켜 주어라.


service tomcat8 start


위와 같이 작성해주면 tomcat이 실행될 것이고 localhost:8080으로 접속하면 It Works라는 반가운 창이 반길 것이다.


만약 접속 포트를 바꾸고 싶다면 /var/lib/tomcat8/conf/server.xml에서 Connector Port 부분을 바꿔주면 된다.


해당 부분을 원하는 포트로 바꾸고 재시작해주면 해당 포트로 WAS를 동작시킬 수 있다.


3. 계정은 생성하자.

블로그에서는 따로 도메인을 생성하지 않고 개인적으로 공부할 경우에는 그냥 9번을 뛰어넘으라 하였지만 난 local에서 동작을 시킬 것이지만 실환경에서는 root가 아닌 웹서버를 위한 계정을 생성하여 등록되어있기 때문에 이에 가장 비슷한 환경에서 진행하기 위해 계정을 추가하였다.


4. DB는 오라클을 !

리얼월드에서는 JSP와 ORACLE이 세트로 가장 잘 나오므로 ORACLE을 설치하였다. (PHP와 Mysql은 Windows 환경에서 진행해보기도 하였으니!)


1. 먼저 자신이 Oracle을 설치하려는 서버가 몇 bit로 동작하는지를 확인 후 ORACLE 사이트에 접속하여 아래에 해당하는 파일 3개를 받는다.


instantclient-basic-linux-12.1.0.2.0.zip

instantclient-sqlplus-linux-12.1.0.2.0.zip

instantclient-sdk-linux-12.1.0.2.0.zip



2. /opt 내에 oracle 폴더를 생성한 뒤 다운 받은 파일들을 해당 폴더로 이동시킨다.

cd /opt

mkdir oracle

mv [다운받은 파일 경로]/instantclient-* /opt/oracle/


3. /opt/oracle 폴더로 가 다운받은 파일들을 unzip 명령어로 풀어준다.

cd /opt/oracle

unzip instantclient-basic-linux-12.1.0.2.0.zip

unzip instantclient-sqlplus-linux-12.1.0.2.0.zip

unzip instantclient-sdk-linux-12.1.0.2.0.zip

이 때부터 sqlplus는 사용이 가능하다.


4. 이후부터는 정리하지 않습니다. 필요하신 분들은 참고 보고 이어해주시길 바랍니다. 정리하지 않는 이유는 상단에 나와있습니다..


참고 : https://blog.zsec.uk/msforacle/

참고 : https://github.com/rapid7/metasploit-framework/wiki/How-to-get-Oracle-Support-working-with-Kali-Linux

참고 : https://mjsoracleblog.wordpress.com/2015/08/19/five-steps-to-have-your-own-metasploit-and-oracle-demo-environment/

반응형

'Develope > JSP' 카테고리의 다른 글

[JSP] html entity escape ( XSS prevention )  (0) 2020.07.23
[JSP 보안] Secure Coding  (0) 2018.05.01
블로그 이미지

rootable

,